home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
man
/
cat.1
/
tcsh.1
< prev
next >
Wrap
Text File
|
1995-07-25
|
163KB
|
3,499 lines
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
NNNNAAAAMMMMEEEE
tcsh - C shell with file name completion and command line
editing
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
ttttccccsssshhhh [ ----bbbbccccddddeeeeffffiiiimmmmnnnnqqqqssssttttvvvvVVVVxxxxXXXX ] [ _a_r_g_u_m_e_n_t ... ]
or
ttttccccsssshhhh ----llll
OS/Dependent Options
ttttccccsssshhhh [ ----FFFF ] [ ----DDDDnnnnaaaammmmeeee[[[[====vvvvaaaalllluuuueeee]]]] ]
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
_T_c_s_h is an enhanced version of the Berkeley UNIX C shell
_c_s_h(1). It behaves exactly like the C shell, except for the
added utilities of:
1) Command line editing using Emacs-style commands.
2) Visual step up/down through the history list.
3) Terminal mode sanity checking and resetting.
4) Interactive command, file name and user name
completion.
5) File/directory/user list in the middle of a typed
command.
6) Spelling correction of command, file, and user names.
7) Lookup of command documentation in the middle of a
typed command.
8) Enhanced history mechanism.
9) Automatic locking/logout after long periods of idle
time.
10) Automatic execution of a single command prior to
printing each prompt.
11) Automatic periodic command execution.
12) A new syntax for the prompt, and the ability to set
the prompt for "while" and "for" loops.
13) Time stamps in the history list.
14) An addition to the syntax of filenames to access
entries in the directory stack, and the ability treat
Page 1 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
symbolic links in a sane way when changing
directories.
15) The ability to watch for logins and logouts by user or
terminal on the machine.
16) A scheduled event list, which specifies commands which
are to be executed at given times.
17) A new builtin that does a subset of _l_s(1).
18) An addition to the file expression syntax for a
character not in a set of characters and the ability
to negate a globbing pattern.
19) New automatically initialized environment variables
_H_O_S_T and _H_O_S_T_T_Y_P_E.
20) Commands for debugging terminal capabilities.
21) Searching for the visual history mechanism.
22) New builtins for the _w_h_i_c_h(1) and _w_h_e_r_e commands.
23) Restarting a stopped editor with two keystrokes.
24) Status line support
25) Automatic execution of a command when the current
working directory is changed.
26) Native Language System support.
27) Automatic process time reporting.
28) OS Dependent Builtin Support
29) Automatic window size adjustment
30) Input files
31) Additional/Undocumented Options
32) Enhanced history/variable modifier expansion
33) Programmable completion.
34) Enhanced file inquiry operator.
35) Readonly variables.
For a description of standard C-shell features, see the _c_s_h
Page 2 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
manual page.
1111.... CCCCOOOOMMMMMMMMAAAANNNNDDDD LLLLIIIINNNNEEEE EEEEDDDDIIIITTTTIIIINNNNGGGG
Commands that the user types in may be edited using the same
control characters that Gnu Emacs or vi uses. Arrow and
function key sequences are also allowed. _T_c_s_h allows this
by setting the terminal to `CBREAK' mode and reading the
input one character at a time.
There is a new shell command, _b_i_n_d_k_e_y, that allows the user
to redefine what any key does, or find out what any or all
of the keys do.
Syntax: bindkey [ -a ] [ -c ] [ -s ] [ -v ] [ -e ] [ -d ] [
-k ] [ -l ] [ -r ] [ -- ] [ [ in-string | key-name ] [ out-
string | command ]]
If no values are given all bindings are listed. If only in-
string is given, bindings for the in-string is listed.
Otherwise it binds the in-string to the given out-string or
command. If out-string, this is treated as input to _t_c_s_h
when in-string is typed. This may be used recursively to
currently a level of 10 deep.
There are two basic key maps: the normal and alternative
one. The alternative is used by VI command mode. For multi-
character input the basic key maps contains a sequence-
lead-in for the first character in the input.
Options:
-a bind in-string in alternative key map
-s bind an out-string instead of a command
-c bind a unix command instead of a command
-v bind for default VI-mode
-e bind for default emacs-mode
-k interpret in-string as a symbolic arrow key name
-d bind to compiled in default
-l list functions available with short description
-r remove the binding of in-string
In strings control characters may be written as caret-
<letter> and backslash ("\") is used to escape a character
as follows:
\\\\aaaa bell character
\\\\nnnn line feed (new line)
\\\\bbbb back space
\\\\tttt horizontal tab
\\\\vvvv vertical tab
\\\\ffff form feed
\\\\rrrr carriage return
\\\\eeee escape
Page 3 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
\\\\nnnnnnnnnnnn character code in octal
In all other cases \ escapes the following character. Needed
for escaping the special meaning of \ and ^. Delete is
written as "^?" (caret-question mark).
_T_c_s_h always binds the arrow keys as defined by the termcap
entry to:
up arrow up-history
down arrow down-history
right arrow forward-char
left arrow backward-char
except where these bindings would alter other single
character bindings. If this is not desired one can avoid
the automatic arrow key binding using _s_e_t_t_c to change the
arrow key escape sequences to the empty string. The
ansi/vt100 sequences for arrow keys are always bound.
The following is a list of the default emacs and vi
bindings. Characters with the 8th bit set are written as
M-<character>. Note however, that unlike with the old _b_i_n_d
command (see below), the syntax M-<character> has no special
meaning to the _b_i_n_d_k_e_y command, and the bindings for the
sequence escape+<character> and M-<character> as given below
are handled separately (although the the default bindings
are the same). The printable ascii characters not mentioned
in the list are bound to the _s_e_l_f-_i_n_s_e_r_t-_c_o_m_m_a_n_d function,
which just inserts the given character literally into the
input line. The remaining characters are bound to the
_u_n_d_e_f_i_n_e_d-_k_e_y function, which only causes a beep (unless
_n_o_b_e_e_p is set, of course).
EMACS bindings
"^@" -> set-mark-command
"^A" -> beginning-of-line
"^B" -> backward-char
"^C" -> tty-sigintr
"^D" -> delete-char-or-list
"^E" -> end-of-line
"^F" -> forward-char
"^G" -> is undefined
"^H" -> backward-delete-char
"^I" -> complete-word
"^J" -> newline
"^K" -> kill-line
"^L" -> clear-screen
"^M" -> newline
"^N" -> down-history
"^O" -> tty-flush-output
"^P" -> up-history
Page 4 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
"^Q" -> tty-start-output
"^R" -> redisplay
"^S" -> tty-stop-output
"^T" -> transpose-chars
"^U" -> kill-whole-line
"^V" -> quoted-insert
"^W" -> kill-region
"^X" -> sequence-lead-in
"^Y" -> yank
"^Z" -> tty-sigtsusp
"^[" -> sequence-lead-in
"^\" -> tty-sigquit
"^]" -> tty-dsusp
" " to "/" -> self-insert-command
"0" to "9" -> digit
":" to "~" -> self-insert-command
"^?" -> backward-delete-char
EMACS Multi-character and 8 bit bindings
"^[^D" or "M-^D" -> list-choices
"^[^H" or "M-^H" -> backward-delete-word
"^[^I" or "M-^I" -> complete-word
"^[^L" or "M-^L" -> clear-screen
"^[^Z" or "M-^Z" -> run-fg-editor
"^[^[" or "M-^[" -> complete-word
"^[^_" or "M-^_" -> copy-prev-word
"^[ " or "M- " -> expand-history
"^[!" or "M-!" -> expand-history
"^[$" or "M-$" -> spell-line
"^[0" or "M-0" -> digit-argument
"^[1" or "M-1" -> digit-argument
"^[2" or "M-2" -> digit-argument
"^[3" or "M-3" -> digit-argument
"^[4" or "M-4" -> digit-argument
"^[5" or "M-5" -> digit-argument
"^[6" or "M-6" -> digit-argument
"^[7" or "M-7" -> digit-argument
"^[8" or "M-8" -> digit-argument
"^[9" or "M-9" -> digit-argument
"^[?" or "M-?" -> which-command
"^[B" or "M-B" -> backward-word
"^[C" or "M-C" -> capitalize-word
"^[D" or "M-D" -> delete-word
"^[F" or "M-F" -> forward-word
"^[H" or "M-H" -> run-help
"^[L" or "M-L" -> downcase-word
"^[N" or "M-N" -> history-search-forward
"^[P" or "M-P" -> history-search-backward
"^[R" or "M-R" -> toggle-literal-history
"^[S" or "M-S" -> spell-word
"^[U" or "M-U" -> upcase-word
Page 5 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
"^[W" or "M-W" -> copy-region-as-kill
"^[_" or "M-_" -> insert-last-word
"^[b" or "M-b" -> backward-word
"^[c" or "M-c" -> capitalize-word
"^[d" or "M-d" -> delete-word
"^[f" or "M-f" -> forward-word
"^[h" or "M-h" -> run-help
"^[l" or "M-l" -> downcase-word
"^[n" or "M-n" -> history-search-forward
"^[p" or "M-p" -> history-search-backward
"^[r" or "M-r" -> toggle-literal-history
"^[s" or "M-s" -> spell-word
"^[u" or "M-u" -> upcase-word
"^[w" or "M-w" -> copy-region-as-kill
"^[^?" or "M-^?" -> backward-delete-word
"^X^X" -> exchange-point-and-mark
"^X*" -> expand-glob
"^X$" -> expand-variables
"^XG" -> list-glob
"^Xg" -> list-glob
"^Xn -> normalize-path
"^XN -> normalize-path
VI Insert Mode functions
"^@" -> is undefined
"^A" -> beginning-of-line
"^B" -> backward-char
"^C" -> tty-sigintr
"^D" -> list-or-eof
"^E" -> end-of-line
"^F" -> forward-char
"^G" -> list-glob
"^H" -> backward-delete-char
"^I" -> complete-word
"^J" -> newline
"^K" -> kill-line
"^L" -> clear-screen
"^M" -> newline
"^N" -> down-history
"^O" -> tty-flush-output
"^P" -> up-history
"^Q" -> tty-start-output
"^R" -> redisplay
"^S" -> tty-stop-output
"^T" -> transpose-chars
"^U" -> backward-kill-line
"^V" -> quoted-insert
"^W" -> backward-delete-word
"^X" -> expand-line
"^Y" -> tty-dsusp
Page 6 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
"^Z" -> tty-sigtsusp
"^[" -> vi-cmd-mode
"^\" -> tty-sigquit
" " to "~" -> self-insert-command
"^?" -> backward-delete-char
VI Command Mode functions
"^@" -> is undefined
"^A" -> beginning-of-line
"^B" -> is undefined
"^C" -> tty-sigintr
"^D" -> list-choices
"^E" -> end-of-line
"^F" -> is undefined
"^G" -> list-glob
"^H" -> backward-char
"^I" -> vi-cmd-mode-complete
"^J" -> newline
"^K" -> kill-line
"^L" -> clear-screen
"^M" -> newline
"^N" -> down-history
"^O" -> tty-flush-output
"^P" -> up-history
"^Q" -> tty-start-output
"^R" -> redisplay
"^S" -> tty-stop-output
"^T" -> is undefined
"^U" -> backward-kill-line
"^V" -> is undefined
"^W" -> backward-delete-word
"^X" -> expand-line
"^[" -> sequence-lead-in
"^\" -> tty-sigquit
" " -> forward-char
"!" -> expand-history
"$" -> end-of-line
"*" -> expand-glob
"+" -> down-history
";" -> vi-repeat-char-fwd
"," -> vi-repeat-char-back
"-" -> up-history
"." -> is undefined
"/" -> vi-search-back
"0" -> vi-zero
"1" to "9" -> digit-argument
"?" -> vi-search-fwd
"@" -> is undefined
"A" -> vi-add-at-eol
"B" -> vi-word-back
"C" -> change-till-end-of-line
Page 7 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
"D" -> kill-line
"E" -> vi-endword
"F" -> vi-char-back
"I" -> vi-insert-at-bol
"J" -> history-search-forward
"K" -> history-search-backward
"N" -> vi-search-back
"O" -> sequence-lead-in
"R" -> vi-replace-mode
"S" -> vi-substitute-line
"T" -> vi-charto-back
"U" -> is undefined
"V" -> expand-variables
"W" -> vi-word-fwd
"X" -> backward-delete-char
"[" -> sequence-lead-in
"\^" -> beginning-of-line
"a" -> vi-add
"b" -> backward-word
"c" -> is undefined
"d" -> vi-delmeta
"e" -> vi-eword
"f" -> vi-char-fwd
"h" -> backward-char
"i" -> vi-insert
"j" -> down-history
"k" -> up-history
"l" -> forward-char
"m" -> is undefined
"n" -> vi-search-fwd
"r" -> vi-replace-char
"s" -> vi-substitute-char
"t" -> vi-charto-fwd
"u" -> vi-undo
"v" -> expand-variables
"w" -> vi-beginning-of-next-word
"x" -> delete-char
"~" -> change-case
"^?" -> backward-delete-char
"M-?" -> run-help
"M-[" -> sequence-lead-in
"M-O" -> sequence-lead-in
VI Multi-character bindings
"^[?" -> run-help
In _t_c_s_h there are two input modes: _i_n_s_e_r_t and _o_v_e_r_w_r_i_t_e. All
characters that are bound to the _s_e_l_f-_i_n_s_e_r_t-_c_o_m_m_a_n_d either
get inserted or overwrite what was under the cursor
depending on the input mode. In emacs one can toggle between
Page 8 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
modes using the _o_v_e_r_w_r_i_t_e-_m_o_d_e function, and in VI one can
use any of the replace mode commands. By default the mode
is preserved between input lines. To specify a default mode
that can be enforced at the beginning of each command line,
the variable _i_n_p_u_t_m_o_d_e can be set to either _i_n_s_e_r_t or
_o_v_e_r_w_r_i_t_e.
There is also an older version of bindkey called _b_i_n_d, that
allows the user to redefine what any key does, or find out
what any or all of the keys do. This is retained for
compatibility reasons.
If given two arguments _b_i_n_d binds the function (first
argument) to the given key (second argument). The key may
be: the direct character or a caret-<letter> combination,
which is converted to control-<letter>; M-<letter> for an
escaped character; or F-<string> for a function key. For
the last of these, the function key prefix must be bound to
the function "sequence-lead-in" and the string specified to
the _b_i_n_d command must not include this prefix.
If given one argument _b_i_n_d takes the argument as the name
for a key and tells what that key does. As a special case,
the user can say
bind emacs
or
bind vi
to bind all the keys for Emacs or vi mode respectively.
If given no arguments _b_i_n_d tells what all of the keys do.
If you give bind the single argument of 'defaults', it
resets each key to its default value (see the above list).
2222.... VVVVIIIISSSSUUUUAAAALLLL HHHHIIIISSSSTTTTOOOORRRRYYYY
The keys ^P and ^N are used to step up and down the history
list. If the user has typed in the following:
> ls
foo bar
> echo mumble
mumble
>
then enters ^_P, the shell will place "echo mumble" into the
editing buffer, and will put the cursor at the end of the
line. If another ^_P is entered, then the editing line will
change to "ls". More ^_Ps will make the bell ring, since
there are no more lines in the history. ^_N works the same
way, except it steps down (forward in time).
Page 9 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
An easy way to re-do a command is to type ^_P followed by
_R_e_t_u_r_n. Also, pieces of previous commands can be assembled
to make a new command. The commands that work on regions
are especially useful for this.
^_P and ^_N actually only copy commands from out of the
history into the edit buffer; thus the user may step back
into the history and then edit things, but those changes do
not affect what is actually in _t_c_s_h '_s history.
Another way to recall (parts of) history commands is via the
'expand-history' function. A variation of the 'expand-
history' function is called 'magic-space'. This function
expands _c_s_h history, and always appends a space. Magic-space
thus can be bound to <space>, to automatically expand _c_s_h
history. Expand-history is normally bound to _M-<_s_p_a_c_e> and
magic-space is not bound.
3333.... TTTTTTTTYYYY MMMMOOOODDDDEEEE SSSSAAAANNNNIIIITTTTYYYY
As part of the editor, _t_c_s_h does a check and reset of the
terminal mode bits. If the speed has been changed, then
_t_c_s_h will change to using that speed. _T_c_s_h will also obey
changes in the padding needed by the tty. Also, the shell
will automatically turn off RAW and CBREAK (on systems that
use _t_e_r_m_i_o(_7) it will turn on ICANON) modes, and will turn
on the tty driver's output processing (OPOST).
The list of the tty modes that are always set or cleared by
_t_c_s_h can be examined and modified using the _s_e_t_t_y builtin.
The _s_e_t_t_y display is similar to _s_t_t_y(_1), and varies
depending on the system's tty driver. Modes that _t_c_s_h will
always try to set are shown as +_m_o_d_e . Modes that _t_c_s_h will
always try to clear are shown as -_m_o_d_e and modes that tcsh
will track and allow to be modified are not shown by
default, or if the -_a flag is given, are shown without a
leading sign. For tty characters, -_c_h_a_r disables the tty
character, while +_c_h_a_r protects the tty character from being
changed.
Setty can be used to control the three different modes _t_c_s_h
uses for the tty. The default mode displayed is the
"execute" mode which is used when tcsh executes commands.
The two other modes are the "edit" mode and the "quote"
mode. The "edit" mode is used for command line editing, and
the "quote" mode is used when entering literal characters.
The "execute" mode can be specified with -_x , the "edit"
mode with -_d , and the "quote" mode with -_q For example if
one wants to set the _e_c_h_o_k flag and let the _e_c_h_o_e pass
unchanged:
> setty
iflag:-inlcr -igncr +icrnl
Page 10 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
oflag:+opost +onlcr -onlret
cflag:
lflag:+isig +icanon +echo +echoe -echok -echonl -noflsh
+echoctl -flusho +iexten
chars:
> setty +echok echoe
> setty
iflag:-inlcr -igncr +icrnl
oflag:+opost +onlcr -onlret
cflag:
lflag:+isig +icanon +echo +echok -echonl -noflsh +echoctl
-flusho +iexten
chars:
4444.... WWWWOOOORRRRDDDD CCCCOOOOMMMMPPPPLLLLEEEETTTTIIIIOOOONNNN
In typing commands, it is no longer necessary to type a
complete name, only a unique abbreviation is necessary.
When you type a TAB to _t_c_s_h it will complete the name for
you, echoing the full name on the terminal (and entering it
into the edit buffer). If the prefix you typed matches no
name, the terminal bell is rung, unless the variable _n_o_b_e_e_p
is set. The name may be partially completed if the prefix
matches several longer names. If this is the case, the name
is extended up to the point of ambiguity, and the bell is
rung. This works for file names, command names, shell
variables and the ~ user name convention. The variable
_f_i_g_n_o_r_e may be set to a list of suffixes to be disregarded
during completion.
_E_x_a_m_p_l_e
Assume the current directory contained the files:
DSC.TXT bin cmd lib memos
DSC.NEW chaos cmtest mail netnews
bench class dev mbox new
The command:
> gnumacs ch[TAB]
would cause _t_c_s_h to complete the command with the file name
chaos. If instead, the user had typed:
> gnumacs D[TAB]
_t_c_s_h would have extended the name to DSC and rung the
terminal bell, indicating partial completion. However, if
_f_i_g_n_o_r_e had previously been set to a list containing .NEW as
one element, e.g. ( .o .NEW ), _t_c_s_h would have completed the
`D' to DSC.TXT.
Page 11 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
File name completion works equally well when other
directories are addressed. Additionally, _t_c_s_h understands
the C shell tilde (~) convention for home directories. In
addition it caches tilde name references for fast access.
This cache can be flushed by using the builtin _r_e_h_a_s_h. Thus,
> cd ~speech/data/fr[TAB]
does what one might expect. This may also be used to expand
login names only. Thus,
> cd ~sy[TAB]
expands to
> cd ~synthesis
Command names may also be completed, for example,
> gnum[TAB]
will expand to "gnumacs" (assuming that there are no other
commands that begin with "gnum").
Shell and environment variables are recognized also and in
addition they can be expanded:
> set local=/usr/local
> echo $lo[TAB]
will expand to "$local/". Note that a slash is appended
because the expanded variable points to a directory. Also:
> set local=/usr/local
> echo $local/[^D]
bin/ etc/ lib/ man/ src/
will correctly list the contents of /usr/local. Shell and
environment variables can also be expanded via the expand-
variables function:
> echo $local/[^X$]
> echo /usr/local/
Completion also works when the cursor is in the middle of
the line, rather than just the end. All of the text after
the cursor will be saved, the completion will work (possibly
adding to the current name), and then the saved text will be
restored in place, after the cursor.
Page 12 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
The behavior of the completion can be changed by the setting
of several shell variables:
Setting the _r_e_c_e_x_a_c_t variable makes an exact command be
expanded rather than just ringing the bell. For example,
assume the current directory has two sub-directories called
foo and food, then with _r_e_c_e_x_a_c_t set the following could be
done:
> cd fo[TAB]
to ...
> cd foo[TAB]
to ...
> cd foo/
rather than beeping on the second TAB.
If the _a_u_t_o_l_i_s_t variable is set, invoking completion when
several choices are possible will automatically list the
choices, effectively merging the functionality described in
the next section into the completion mechanism. If _a_u_t_o_l_i_s_t
is set to "ambiguous", then _t_c_s_h will only list the choices
if there were no new characters added in the completion
operation.
The "noise level" can be controlled by the value that
_m_a_t_c_h_b_e_e_p is set to: With matchbeep=nomatch, completion will
only beep if there are no matching names; with
matchbeep=ambiguous, completion will _a_l_s_o beep if there are
many possible matches; with matchbeep=notunique, completion
will _a_l_s_o beep when there is an exact match but there are
other, longer, matches (see recexact). With matchbeep=never
or set to any other value completion will never beep. If
matchbeep is not set it defaults to ambiguous.
If the _a_u_t_o_e_x_p_a_n_d variable is set, the expand-history
function will be invoked automatically before the completion
attempt, expanding normal _c_s_h history substitutions.
For covert operation, the variable _n_o_b_e_e_p can be set; it
will prevent the completion mechanism, as well as _t_c_s_h in
general, from actually beeping. Finally, if the _a_u_t_o_c_o_r_r_e_c_t
variable is set, the spelling correction is attempted for
any path components up to the completion point.
5555.... LLLLIIIISSSSTTTTIIIINNNNGGGG OOOOFFFF PPPPOOOOSSSSSSSSIIIIBBBBLLLLEEEE NNNNAAAAMMMMEEEESSSS
At any point in typing a command, you may request "what
names are available". Thus, when you have typed, perhaps:
> cd ~speech/data/fritz/
Page 13 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
you may wish to know what files or sub-directories exist (in
~speech/data/fritz), without, of course, aborting the
command you are typing. Typing the character Control-D
(^D), will list the names (files, in this case) available.
The files are listed in multicolumn format, sorted column-
wise. Directories are indicated with a trailing `/',
executable files with a `*', symbolic links with a '@',
sockets with a '=', FIFOs (named pipes) with a '|',
character devices with a '%', and block devices with a '#'.
Once printed, the command is re-echoed for you to complete.
Additionally, one may want to know which files match a
prefix. If the user had typed:
> cd ~speech/data/fr[^D]
all files and sub-directories whose prefix was ``fr'' would
be printed. Notice that the example before was simply a
degenerate case of this with a null trailing file name. (The
null string is a prefix of all strings.) Notice also, that a
trailing slash is required to pass to a new directory for
both file name completion and listing.
The degenerate
> ~[^D]
will print a full list of login names on the current system.
Note, however, that the degenerate
> <Spaces>[^D]
does not list all of the commands, but only the files in the
current working directory.
Listing/expanding of words that match a name containing
wildcard characters can be done via the list-glob/expand-
glob function:
> ls
foo.c bar.c a.out
> vi *.c[^Xg]
foo.c bar.c
> vi *.c[^X*]
> vi foo.c bar.c
CCCCoooommmmmmmmaaaannnndddd NNNNaaaammmmeeee RRRReeeeccccooooggggnnnniiiittttiiiioooonnnn
Command name recognition and completion works in the same
manner as file name recognition and completion above. The
current value of the environment variable _P_A_T_H is used in
searching for the command. For example
> newa[TAB]
Page 14 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
might expand to
> newaliases
Also,
> new[^D]
would list all commands (along PATH) that begin with "new".
Note that Control-D has three different effects on _t_c_s_h. On
an empty line (one that contains nothing, not even spaces),
^_D sends an EOF to _t_c_s_h just as it does for normal programs.
When the cursor is in the middle of a line of text, ^_D
deletes the character that the cursor is under. Finally, a
^_D at the end of a line of text lists the available names at
that point. To get a list of available names when the
cursor is in the middle of a line (or on an empty line), a
Meta-Control-D should be typed (Escape followed by Control-
D).
6666.... SSSSPPPPEEEELLLLLLLLIIIINNNNGGGG CCCCOOOORRRRRRRREEEECCCCTTTTIIIIOOOONNNN
If while typing a command, the user mistypes or misspells a
file name, user name, or command name, _t_c_s_h can correct the
spelling. When correcting a file name, each part of the
path is individually checked and corrected. Spelling
correction can be invoked in several different ways:
The _s_p_e_l_l-_w_o_r_d function, normally bound to M-s (and M-S),
will attempt to correct the word immediately before the
cursor. For example, suppose that the user has typed:
> cd /uxr/spol/news[ESC s]
_T_c_s_h will check the path for spelling, correct the mistakes,
and redraw the line as
> cd /usr/spool/news
leaving the cursor at the end of the line.
Spelling correction of the entire command line (independent
of where the cursor is) can be done with the _s_p_e_l_l-_l_i_n_e
function, normally bound to M-$ (Escape Dollar-sign). It
will check each word independently, but in order to avoid
e.g. command options, no correction is attempted on words
whose first character is found in the string "!.\^-*%".
Finally, automatic spelling correction will be done each
time the Return key is hit, if the _c_o_r_r_e_c_t variable is set
to an appropriate value: correct=cmd will cause the spelling
of the command name only to be checked, while correct=all
Page 15 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
causes checking of all words on the line, like the spell-
line function. If any part of the command line is
corrected, the user will be given a special prompt as
defined by the _p_r_o_m_p_t_3 variable, followed by the corrected
line, e.g.
> lz /usr/bin
CORRECT>ls /usr/bin (y|n|e)?
Answering 'y' or <space> at the prompt will cause the
corrected line to be executed, 'e' will leave the
uncorrected command in the input buffer and anything else
will execute the original line unchanged.
Automatic correction is not guaranteed to work the way the
user intended. Command line parsing is done in a
rudimentary fashion. It is mostly provided as an
experimental feature. Suggestions and improvements are
welcome.
7777.... DDDDOOOOCCCCUUUUMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN LLLLOOOOOOOOKKKKUUUUPPPP
The editor function _r_u_n-_h_e_l_p (M-h) prints a help file on the
current command (using the same definition of current as the
completion routines use). This help file is found by
searching the path list HPATH for files of the form
foo.help, foo.1, foo.8, or foo.6 in that order (assuming
that the current command is foo). The file is just printed,
not paged in any way. This is because _r_u_n-_h_e_l_p is meant to
be used to look up short help files, not manual pages
(although it can do manual pages also).
8888.... EEEENNNNHHHHAAAANNNNCCCCEEEEDDDD HHHHIIIISSSSTTTTOOOORRRRYYYY MMMMEEEECCCCHHHHAAAANNNNIIIISSSSMMMM
_T_c_s_h will save the history list between login sessions. It
does this by writing the current list to the file
"~/.history" on logout, and reading it in on login. For
example, placing the line
> set history=25 savehist=20
tells _t_c_s_h to save the last 25 commands on the history list,
and to save the last 20 of them between logins. The
"savehist" variable may be set up to the size of history,
although it is an error to have _s_a_v_e_h_i_s_t larger than
_h_i_s_t_o_r_y. In addition to the above _t_c_s_h, keeps unparsed
(literal) versions of the history if the variable _h_i_s_t_l_i_t is
set. Also the toggle-history function toggles between the
parsed and literal version of the recalled history in the
editor buffer. For example:
> set histlit
> echo !:s/foo/bar; ls
Modifier failed.
Page 16 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
> ^P
> echo !:s/foo/bar; ls
> unset histlit
> echo !:s/foo/bar; ls
Modifier failed.
> ^P
> echo unset histlit[M-r]
> echo !:s/foo/bar; ls
_T_c_s_h also supports the history escape !#. This undocumented
_c_s_h escape holds the words of the current line. This is
useful in renaming commands:
> mv foo bar!#:1
mv foo barfoo
Care should be taken when using this history expansion in
_c_s_h since there is no check for recursion. In _t_c_s_h up to 10
levels of recursion are allowed.
Another difference between _t_c_s_h and _c_s_h history expansion,
is the treatment of history arguments. In _c_s_h !_3_d expands to
event 3 with the letter "d" appended to it. There is no way
to repeat a command that begins with a number using the name
of the command in the history escape. In _t_c_s_h only numeric
arguments are treated as event numbers; therefore !_3_d is
interpreted as: repeat the last command that started with
the string "3d". To mimic the _c_s_h behavior !_3_\_d can be used.
9999.... AAAAUUUUTTTTOOOOMMMMAAAATTTTIIIICCCC LLLLOOOOGGGGOOOOUUUUTTTT////LLLLOOOOCCCCKKKKIIIINNNNGGGG
The automatic locking and logout time are controlled by the
variable _a_u_t_o_l_o_g_o_u_t. The value of the first word is the
number of minutes of inactivity will be allowed before
automatically logging the user out. When that many minutes
have been reached, the shell prints "auto-logout" and dies
(without executing ~/.logout). The default for _t_c_s_h is to
set _a_u_t_o_l_o_g_o_u_t for 60 minutes on login shells, and when the
user is root. To disable autologout (for instance in a
window system), unset the shell variable _a_u_t_o_l_o_g_o_u_t.
The value of the optional second word indicates the number
of minutes of inactivity after which the user will be
prompted for his login password to continue working. Failure
to enter the correct password 5 times, results in auto-
logout.
11110000.... EEEEXXXXEEEECCCCUUUUTTTTIIIIOOOONNNN OOOOFFFF AAAA CCCCOOOOMMMMMMMMAAAANNNNDDDD PPPPRRRRIIIIOOOORRRR TTTTOOOO EEEEAAAACCCCHHHH PPPPRRRROOOOMMMMPPPPTTTT
_T_c_s_h supports a special alias, _p_r_e_c_m_d, which if set holds a
command that will be executed before printing each prompt.
For example, if the user has done
Page 17 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
> alias precmd date
then the program _d_a_t_e will be run just before the shell
prompts for each command. There are no limitations on what
precmd can be set to do, although discretion should be used.
11111111.... PPPPEEEERRRRIIIIOOOODDDDIIIICCCC CCCCOOOOMMMMMMMMAAAANNNNDDDD EEEEXXXXEEEECCCCUUUUTTTTIIIIOOOONNNN
_T_c_s_h is now capable of providing periodic command execution
through the use of the shell variable _t_p_e_r_i_o_d and the alias
_p_e_r_i_o_d_i_c. When these items are set, the alias _p_e_r_i_o_d_i_c will
be executed every _t_p_e_r_i_o_d minutes. This provides a
convenient means for checking on common but infrequent
changes, such as new messages. Example:
> set tperiod = 30
> alias periodic checknews
This will cause the _c_h_e_c_k_n_e_w_s(1) program to be run every 30
minutes. Having the alias _p_e_r_i_o_d_i_c set but with an unset
_t_p_e_r_i_o_d (or a value of 0 for _t_p_e_r_i_o_d) will cause _p_e_r_i_o_d_i_c to
degenerate to another form of _p_r_e_c_m_d.
11112222.... NNNNEEEEWWWW PPPPRRRROOOOMMMMPPPPTTTT FFFFOOOORRRRMMMMAAAATTTT
The format for the _p_r_o_m_p_t shell variable has been changed to
include many new things, such as the current time of day,
current working directory, etc.. The new format uses
"%<char>" to signal an expansion, much like _p_r_i_n_t_f(_3_S). The
available sequences are:
%/ Current working directory.
%~ cwd. If it starts with $HOME, that part is
replaced by a ~. In addition if a directory
name prefix matches a user's home directory,
that part of the directory will be substituted
with ~user. NOTE: The ~user substitution will
only happen if the shell has performed a ~
expansion for that user name in this session.
%c or %. Trailing component of cwd, may be
followed by by a digit to get more than one
component, if it starts with $HOME, that
part is replaced with a ~.
%C Trailing component of cwd, may be followed
by a digit to get more than one component, no
~ substitution.
%h, %!, ! Current history event number.
%M The full machine hostname.
%m The hostname up to the first ".".
%S (%s) Start (stop) standout mode.
%B (%b) Start (stop) boldfacing mode. (Only if
tcsh was compiled to be eight bit clean.)
%U (%u) Start (stop) underline mode. (Only if
tcsh was compiled to be eight bit clean.)
Page 18 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
%t or %@ Current time of day, in 12-hour, am/pm format.
%T Current time of day, in 24-hour format.
(But see the _a_m_p_m shell variable below.)
%p Current time in 12-hour format, am/pm format with seconds.
%P Current time in 24-hour format, with seconds.
\c `c' is parsed the same way as in bindkey.
^c `c' is parsed the same way as in bindkey.
%% A single %.
%n The user name, contents of $user.
%d The weekday in <Day> format.
%D The day in dd format.
%w The month in <Mon> format.
%W The month in mm format.
%y The year in yy format.
%Y The year in yyyy format.
%l The line (tty) the user is logged on.
%L clear from prompt to end of display or end of line.
%# A `#' if tcsh is run as a root shell,
a `>' if not.
%{..%} Include string as a literal escape sequence.
Note that the enclosed escape sequence, should
only be used to change terminal attributes and
should not move the cursor location. Also, this
cannot be the last character in the prompt
string. (Available only if tcsh was compiled to
be eight bit clean.)
%? return code of the last command executed just
before the prompt.
%R In prompt3 this is the corrected string; in
prompt2 it is the status of the parser.
On %C, %c and %., if the optional digit is 0, then then next
digit is interpreted as the number of directory components
to be skipped, and the number of components skipped are
reported as: /<num-skipped>path/path.
The sequences for standout are often used to indicate that
this is an enabled (running as root) shell. An example:
> set prompt="%m [%h] %U[%@]%u [%/] you rang? "
tut [37] [_2:_5_4_p_m] [/usr/accts/sys] you rang? _
In addition, there is a new variable, _p_r_o_m_p_t_2, which is used
to prompt for the body of while and for loops (wherever
normal _c_s_h prompts with a question mark). The default for
_p_r_o_m_p_t_2 is "%R? ": the status of the parser followed by a
question mark. This alternate prompt is also used when the
parser is waiting for more input; i.e. when the previous
line ended in a \. The _p_r_o_m_p_t_3 variable is used when
displaying the corrected command line when automatic
spelling correction is in effect; it defaults to "CORRECT>%R
(y|n|e)? ".
Page 19 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
11113333.... TTTTIIIIMMMMEEEE----SSSSTTTTAAAAMMMMPPPPEEEEDDDD HHHHIIIISSSSTTTTOOOORRRRYYYY LLLLIIIISSSSTTTT
The history list in _t_c_s_h now has a time-of-day stamp
attached to each history list event. This time stamp is
printed whenever the history command is executed. This
allows the user to keep track of when the various events
occurred. The time stamps are not maintained on the saved
history list (also available in _c_s_h); thus, on logging back
in, all the saved history events will be recorded with the
login time as their time stamp. The time stamp printouts
can be omitted from the history list by adding the -t switch
to the _h_i_s_t_o_r_y command. _T_c_s_h provides a way to save,
restore and clear the history list in a file.
_h_i_s_t_o_r_y -_S [<_f_i_l_e_n_a_m_e>]
_h_i_s_t_o_r_y -_L [<_f_i_l_e_n_a_m_e>]
_h_i_s_t_o_r_y -_c
The 'S' flag saves the current history, the 'L' flags loads
the history, and the 'c' flag clears the history. If a
filename is not specified, then $HOME/.history is used.
11114444.... DDDDIIIIRRRREEEECCCCTTTTOOOORRRRYYYY AAAACCCCCCCCEEEESSSSSSSS
_T_c_s_h supports three new flags to control directory style
printing for cd, pushd, popd, and dirs:
-_n Print entries in new lines so that the screen width is
not exceeded
-_l Don't print ~ but print the whole path
-_v Print the stack entries one in each line, preceded by
the stack number.
Note that popd +n can be used to pop out stack entries of
directories that do not exist any more.
_T_c_s_h always saves the last directory visited. Changing to
the previous directory can be done by using '_c_d -' or '_p_u_s_h_d
-'.
_T_c_s_h will now allow the user to access all elements in the
directory stack directly. The syntax "=<digit>" is
recognized by _t_c_s_h as indicating a particular directory in
the stack. (This works for the file/command name
recognition as well.) This syntax is analogous to the ~
syntax for access to users' home directories. The stack is
viewed as zero-based, i.e., =0 is the same as $cwd, which is
the same as ".". As a special case, the string "=-" is
recognized as indicating the last directory in the stack.
Thus,
> dirs -v
Page 20 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
0 /usr/net/bin
1 /usr/spool/uucp
2 /usr/accts/sys
> echo =2
/usr/accts/sys
> ls -l =1/LOGFILE
-rw-r--r-- 1 uucp 2594 Jan 19 09:09 /usr/spool/uucp/LOGFILE
> echo =-/.cs*
/usr/accts/sys/.cshrc
> echo =4
Not that many dir stack entries.
>
_T_c_s_h will complain if you ask for a directory stack item
which does not exist.
In the normal _c_s_h, saying "pushd +2" would rotate the entire
stack around through 2 stack elements, placing the entry
found there at the top of the stack. If, however, the new
shell variable _d_e_x_t_r_a_c_t is set, then issuing "pushd +n" will
cause the nth directory stack element to be extracted from
its current position, which will then be pushed onto the top
of the stack. Example:
> dirs
~ /usr/spool/uucp /usr/net/bin /sys/src
> set dextract
> pushd +2
/usr/net/bin ~ /usr/spool/uucp /sys/src
> unset dextract
> pushd +2
/usr/spool/uucp /sys/src /usr/net/bin ~
_T_c_s_h provides a way to save, restore and clear the directory
stack in a file.
_d_i_r_s -_S [<_f_i_l_e_n_a_m_e>]
_d_i_r_s -_L [<_f_i_l_e_n_a_m_e>]
_d_i_r_s -_c
The 'S' flag saves the current directory stack, the 'L'
flags loads the directory stack, and the 'c' flag clears the
directory stack. If a filename is not specified, then
$HOME/.cshdirs is used.
In addition, if the shell variable _d_u_n_i_q_u_e is set, only
directories that are not already in the directory stack will
be added when _p_u_s_h is invoked.
The way symbolic links that point to directories are crossed
is determined by the _s_y_m_l_i_n_k_s variable. By default, it is
not set to anything and symbolic links are not treated
Page 21 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
specially. However, it can be set to either: _c_h_a_s_e, _i_g_n_o_r_e,
or _e_x_p_a_n_d. If _s_y_m_l_i_n_k_s is set to _c_h_a_s_e, then every time the
directory changes, $_c_w_d reflects the real directory name,
and not the name through the link. A notable exception is
the user's home directory, but that should be fixed. If
_s_y_m_l_i_n_k_s is set to either _i_g_n_o_r_e or _e_x_p_a_n_d, then tcsh tries
to determine the current directory name relative to the name
of the current directory before the link was crossed. In
simple terms, if you chdir through a symbolic link and then
cd .., you will end .. relatively to where you were before
you crossed the link and not .. relatively to where the
symbolic link points. While _i_g_n_o_r_e affects only builtin
commands and completion, _e_x_p_a_n_d affects command execution
too, by `fixing' arguments that it considers to be path
names. Unfortunately this does not work in every case,
specially when file arguments are embedded in command line
options. _E_x_p_a_n_d also allows to specify the `real' (as
opposed to the one determined relatively to $_c_w_d), _b_y
_q_u_o_t_i_n_g _t_h_e _f_i_l_e _a_r_g_u_m_e_n_t.
For example:
> cd /tmp
> mkdir from from/src to
> ln -s ../from/src to/dst
> unset symlinks
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ..; echo $cwd
/tmp/from
> set symlinks=chase
> cd /tmp/to/dst; echo $cwd
/tmp/from/src
> cd ..; echo $cwd
/tmp/from
> set symlinks=ignore
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ..; echo $cwd
/tmp/to
> set symlinks=expand
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ..; echo $cwd # builtin
/tmp/to
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ".."; echo $cwd # quoted
Page 22 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
/tmp/from
> /bin/echo .. # rewrites non builtin commands.
/tmp/to
> /bin/echo ".."
While the _e_x_p_a_n_d setting is the most convenient, and makes
symbolic links invisible, it can sometimes be misleading and
confusing in cases where it fails to recognize arguments. A
compromise is to use the _i_g_n_o_r_e setting and use the editor
functions "normalize-path", bound by default to ^_X_n.
11115555.... WWWWAAAATTTTCCCCHHHHIIIINNNNGGGG FFFFOOOORRRR LLLLOOOOGGGGIIIINNNNSSSS AAAANNNNDDDD LLLLOOOOGGGGOOOOUUUUTTTTSSSS
_T_c_s_h has a mechanism so that the user can watch for login
and logout activity of any user or terminal in the system.
This is accomplished using the new special shell variable
_w_a_t_c_h, which contains login/terminal pattern pairs to be
checked for activity. For example:
> set watch=(sys ttyjd root console)
This setting will allow the user to check on when the user
"sys" logs in on /dev/ttyjd. Similarly, it will inform the
user of root's activity on the console. In order to be more
general, the word "any" may be substituted for either a
user's or a terminal's name, thus allowing
> set watch=('b*' any any ttyh0)
which will check for users that match the pattern 'b*'
logging in or out of the system on any terminal, as well as
anyone logging in to /dev/ttyh0. Naturally, the completely
general case
> set watch=(any any)
allows the user to check on any and all login/logout
activity in the the system.
By default, the interval between checks of users on the
system is 10 minutes; this can be changed by making the
first element of _w_a_t_c_h a number of minutes which should be
used instead, as in
> set watch=(40 any any)
which will check for any users logging in or out every 40
minutes.
There is also a new command, _l_o_g, which is used to cause
_t_c_s_h to inform the user of all users/terminals affected by
_w_a_t_c_h whether they have been announced before or not. This
is useful if a user has been on for some time and cannot
Page 23 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
remember if a particular person/terminal is online right now
or not. _L_o_g will reset all indication of previous
announcement and give the user the login list all over
again, as well as printing the current value of _w_a_t_c_h.
The first time that _w_a_t_c_h is set at _t_c_s_h startup, all
affected users and terminals will be printed as though those
users/terminals had just logged on. This may appear to be a
bug, but is generally considered a feature, since it allows
the user to see who is on when he first logs in.
The format of the printouts can be tailored via setting of
the variable _w_h_o. In addition to the standard prompt %
escapes, the following sequences are available for the
format specification:
%n The name of the user that logged in/out.
%a The observed action, i.e. "logged on",
"logged off", or "replaced <olduser> on".
%l The line (tty) the user is logged on.
%M The full hostname of the remote host ("local"
if non-remote).
%m The hostname up to the first ".". If only
the ip address is available or the utmp
field contains the name of an x-windows
display, the whole name is printed.
The %M and %m sequences are only available on systems that
store the remote hostname in /etc/utmp. If _w_h_o is not set,
the format defaults to "%n has %a %l from %m.", or "%n has
%a %l." on systems that don't store the hostname.
11116666.... TTTTIIIIMMMMEEEEDDDD EEEEVVVVEEEENNNNTTTT LLLLIIIISSSSTTTT
_T_c_s_h now supports a scheduled-event list through the use of
the command _s_c_h_e_d. This command gives the user a mechanism
by which to arrange for other commands to be executed at
given times. An event is added to the scheduled-event list
by saying
> sched [+]hh:mm <command>
as in
> sched 11:00 echo It\'s eleven o\'clock.
This will make an entry in the list at 11am for the echo
command to be run with the given arguments. The time may be
specified in either absolute or relative time, and absolute
times may have a morning/afternoon specification as well,
using "am" or "pm." For example,
> sched +2:15 /usr/lib/uucp/uucico -r1 -sother
Page 24 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
> sched 5pm set prompt='[%h] It\'s after 5; go home: >'
> sched +3am echo This syntax doesn\'t work.
Relative time inconsistent with am/pm.
>
Note that _t_c_s_h will complain if you try to make faulty time
specifications.
Printing the current time-event list is accomplished by
giving the _s_c_h_e_d command with no arguments:
> sched
1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
2 Wed Apr 4 17:00 set prompt=[%h] It's after 5; go home: >
>
There is also a mechanism by which the user can remove an
item from the list:
> sched --3
Usage for delete: sched -<item#>.
> sched -3
Not that many scheduled events.
> sched -2
> sched
1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
>
All commands specified on the scheduled-event list will be
executed just prior to printing the first prompt immediately
following the time when the command is to be run. Hence, it
is possible to miss the exact time when the command is to be
run, but _t_c_s_h will definitely get around to all commands
which are overdue at its next prompt. Scheduled-event list
items which come due while _t_c_s_h is waiting for user input
will be executed immediately. In no case, however, will
normal operation of already-running commands be interrupted
so that a scheduled-event list element may be run.
This mechanism is similar to, but not the same as, the _a_t(1)
command on some Unix systems. Its major disadvantage is
that it does not necessarily run a command at exactly the
specified time (but only if another command is already being
run). Its major advantage is that commands which run
directly from _t_c_s_h, as sched commands are, have access to
shell variables and other structures. This provides a
mechanism for changing one's working environment based on
the time of day.
11117777.... BBBBUUUUIIIILLLLTTTTIIIINNNN FFFFOOOORRRR llllssss ----FFFF
There is a new builtin command called _l_s-_F which does the
same thing as the command "ls -F". If the shell variable
Page 25 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
_s_h_o_w_d_o_t_s has been set, it acts like "ls -aF". If _s_h_o_w_d_o_t_s is
equal to "-A", then _l_s-_F acts like "ls -AF". Ls-F works like
ls, only it is generally faster, since it does not need to
fork and exec, and safer against Trojan horses if the user
has `.' in the execution path. If other switches are passed
to _l_s-_F, then the normal ls is executed. Aliasing ls to ls-F
provides a fast alternative way of listing files. Note that
on non BSD machines, where ls -C is not the default, _l_s-_F,
behaves like ls -CF.
_l_s-_F appends the following characters depending on the file
type:
= File is an AF_UNIX domain socket.
[if system supports sockets]
| File is a named pipe (fifo)
[if system supports named pipes]
% File is a character device
# File is a block device
/ File is a directory
* File is executable
+ File is a hidden directory [aix]
or context dependent [hpux]
: File is network special [hpux]
On systems that support symbolic links the variable
_l_i_s_t_l_i_n_k_s controls the way symbolic links are identified. If
_l_i_s_t_l_i_n_k_s is not set then the character '@' is appended to
the file. If _l_i_s_t_l_i_n_k_s is set then the following characters
are appended to the filename depending on the type of file
the symbolic links points to:
@ File is a symbolic link pointing
to a non-directory
> File is a symbolic link pointing
to a directory
& File is a symbolic link pointing
to nowhere
While setting _l_i_s_t_l_i_n_k_s can be helpful while navigating
around the file system, it slows down _l_s-_F and it causes
mounting of file systems if the symbolic links point to an
NFS auto-mounted partition.
11118888.... GGGGLLLLOOOOBBBBBBBBIIIINNNNGGGG SSSSYYYYNNNNTTTTAAAAXXXX AAAADDDDDDDDIIIITTTTIIIIOOOONNNNSSSS
The syntax for any character in a range (for example ".[a-
z]*") has been extended so as to conform with standard Unix
regular expression syntax (see _e_d(1)). Specifically, after
an open bracket ("["), if the first character is a caret
("^") then the character matched will be any not in the
range specified. For example:
Page 26 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
> cd ~
> echo .[a-z]*
.cshrc .emacs .login .logout .menuwmrc
> echo .[^.]*
.Xdefaults .Xinit .cshrc .emacs .login .logout .menuwmrc
>
Note that the second form includes .Xdefaults and .Xinit
because 'X' (and all the lower case letters) are outside of
the range of a single '.'.
Also the ability to negate a globbing pattern has been
added:
> echo *
foo foobar bar barfoo
> echo ^foo*
bar barfoo
Note that this does not work correctly if the expression
does not have any wildcard characters (?*[]) or if the
expression has braces {}.
11119999.... NNNNEEEEWWWW EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT AAAANNNNDDDD SSSSHHHHEEEELLLLLLLL VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS
On startup, _t_c_s_h now automatically initializes the
environment variable _H_O_S_T to the name of the machine that it
is running on. It does this by doing a _g_e_t_h_o_s_t_n_a_m_e(2)
system call, and setting _H_O_S_T to the result.
_T_c_s_h also initializes the environment variable _H_O_S_T_T_Y_P_E to a
symbolic name for the type of computer that it is running
on. This is useful when sharing a single physical directory
between several types of machines (running NFS, for
instance). For example, if the following is in ._l_o_g_i_n:
set path = (~/bin.$HOSTTYPE /usr/ucb /bin /usr/bin
/usr/games .)
and the user has directories named "bin._m_a_c_h_i_n_e" (where
_m_a_c_h_i_n_e is a name from the list below), then the user can
have the same programs compiled for different machines in
the appropriate "bin._m_a_c_h_i_n_e" directories and _t_c_s_h will run
the binary for the correct machine.
The current possible values are:
_3_8_6_B_S_D an Intel 386, running 386BSD
_a_i_x_3_7_0 an IBM 370, running aix
_a_i_x_E_S_A an IBM ESA, running aix
_a_l_l_i_a_n_t an Alliant FX series
_a_l_l_i_a_n_t-_f_x_8_0 an Alliant FX80 (mc68000 based)
_a_l_l_i_a_n_t-_f_x_2_8_0_0 an Alliant FX2800 (i860 based)
Page 27 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
_a_l_p_h_a an DEC Alpha running OSF/1
_a_m_d_a_h_l an Amdahl running uts 2.1
_a_m_i_g_a an amiga running amix 2.02
_a_p_o_l_l_o an Apollo running DomainOS
_a_t_t_3_b_1_5 an AT&T 3b15
_a_t_t_3_b_2 an AT&T 3b2
_a_t_t_3_b_2_0 an AT&T 3b20
_a_t_t_3_b_5 an AT&T 3b5
_b_a_l_a_n_c_e a Sequent Balance (32000 based)
_b_s_d_3_8_6 an Intel 386, running BSDI's bsd386
_b_u_t_t_e_r_f_l_y a BBN Computer Butterfly 1000
_c_o_h_3_8_6 a 386 running Coherent 4.0
_c_o_h_e_r_e_n_t an unknown machine running Coherent
_c_o_n_v_e_x a Convex
_c_r_a_y a Cray running Unicos
_d_e_c_s_t_a_t_i_o_n a DecStation XXXX
_e_t_a_1_0 an ETA 10 running SVR3
_g_o_u_l_d-_n_p_1 a Gould NP1
_h_k_6_8 a Heurikon HK68 running Uniplus+ 5.0
_h_p_3_0_0 an HP 9000, series 300, running mtXinu
_h_p_8_0_0 an HP 9000, series 800, running mtXinu
_h_p_9_0_0_0_s_3_0_0 an HP 9000, series 300, running hpux
_h_p_9_0_0_0_s_5_0_0 an HP 9000, series 500, running hpux
_h_p_9_0_0_0_s_7_0_0 an HP 9000, series 700, running hpux
_h_p_9_0_0_0_s_8_0_0 an HP 9000, series 800, running hpux
_h_p an HP, running hpux
_i_3_8_6 an Intel 386, generic
_i_3_8_6-_m_a_c_h an Intel 386, running mach
_i_3_8_6-_l_i_n_u_x an Intel 386, running Linux
_i_3_8_6-_e_m_x an Intel 386, running emx [unix emulation under OS/2]
_i_n_t_e_l_3_8_6 an Intel 386, running INTEL's SVR3
_i_r_i_s_3_d a Silicon Graphics Iris 3000
_i_r_i_s_4_d a Silicon Graphics Iris 4D
_i_s_c_3_8_6 an Intel 386, running ISC
_l_y_n_x_o_s-_i_3_8_6 _A_n _I_n_t_e_l _3_8_6 _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_l_y_n_x_o_s-_i_8_6_0 _A_n _I_n_t_e_l _8_6_0 _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_l_y_n_x_o_s-_m_6_8_k _A _M_o_t_o_r_o_l_a _6_8_K _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_l_y_n_x_o_s-_m_8_8_k _A _M_o_t_o_r_o_l_a _8_8_K _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_l_y_n_x_o_s-_s_p_a_r_c _A _s_p_a_r_c _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_l_y_n_x_o_s-_m_i_p_s _A _m_i_p_s _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_l_y_n_x_o_s-_u_n_k_n_o_w_n _S_o_m_e_t_h_i_n_g _r_u_n_n_i_n_g _L_y_n_x/_O_S-_2._1
_m_8_8_k an mc88000 CPU machine
_m_a_c_2 an Apple Computer Macintosh II, running AUX
_m_a_s_s_c_o_m_p a Concurrent (Masscomp), running RTU
_m_i_n_i_x_3_8_6 an i386 running minix
_m_i_n_i_x a mac or an amiga running minix
_m_i_p_s another mips CPU
_m_u_l_t_i_m_a_x an Encore Computer Corp. Multimax (32000 based)
_n_e_w_s a Sony NEWS 800 or 1700 workstation
_n_e_w_s__m_i_p_s a NeWS machine with mips CPU
_n_d_5_0_0 a Norsk Data ND 500/5000 running Ndix
_n_s_3_2_0_0_0 an NS32000 CPU machine
Page 28 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
_n_e_x_t a NeXT computer
_p_a_r_a_g_o_n an intel paragon running osf1
_p_f_a_5_0 a PFU/Fujitsu A-xx computer
_p_s_2 an IBM PS/2, running aix
_p_t_x a Sequent Symmetry running DYNIX/ptx (386/486 based)
_p_y_r_a_m_i_d a Pyramid Technology computer (of any flavor)
_r_s_6_0_0_0 an IBM RS6000, running aix
_r_t an IBM PC/RT, running BSD (AOS 4.3) or mach
_r_t_p_c an IBM PC/RT, running aix
_s_c_o_3_8_6 an Intel 386, running SCO
_s_t_e_l_l_a_r a stellar running stellix
_s_u_n a Sun workstation of none of the above types
_s_u_n_2 a Sun Microsystems series 2 workstation (68010 based)
_s_u_n_3 a Sun Microsystems series 3 workstation (68020 based)
_s_u_n_3_8_6_i a Sun Microsystems 386i workstation (386 based)
_s_u_n_4 a Sun Microsystems series 4 workstation (SPARC based)
_s_y_m_m_e_t_r_y a Sequent Symmetry running DYNIX 3 (386/486 based)
_s_y_s_V_8_8 a Motorola MPC running System V/88 R32V2 (SVR3/88100 based)
_t_a_h_o_e a tahoe running 4BSD
_t_e_k_4_3_0_0 a Tektronix 4300 running UTek (BSD 4.2 / 68020 based)
_t_e_k_X_D_8_8 a Tektronix XD88/10 running UTekV 3.2e (SVR3/88100 based)
_t_i_t_a_n an Stardent Titan
_u_n_i_x_p_c an UNIX/PC running SVR1 att7300 aka att3b1
_v_a_x a Digital Equipment Corp. Vax (of any flavor)
_v_i_s_t_r_a_8_0_0 a Stardent Vistra 800 running SVR4
_V_M_S-_P_O_S_I_X a vax? running VMS/POSIX
(The names of the machines are usually trade marks of the
corresponding companies.)
_T_c_s_h also initializes the shell variables _u_i_d and _g_i_d to the
value of the current real user ID/GID. This is useful for
telling what user/group the shell is running as. Under
Domain/OS _t_c_s_h will also set _o_i_d indicating the current real
organization id.
22220000.... CCCCOOOOMMMMMMMMAAAANNNNDDDDSSSS FFFFOOOORRRR DDDDEEEEBBBBUUUUGGGGGGGGIIIINNNNGGGG
Only two such commands are available at this point, both
concerned with testing termcap entries.
_t_e_l_l_t_c tells you, politely, what _t_c_s_h thinks of your
terminal, and _s_e_t_t_c `cap' `value' tells _t_c_s_h to believe that
the termcap capability `cap' ( as defined in _t_e_r_m_c_a_p(5) )
has the value `value'. No checking for sanity is performed,
so beware of improper use.
Note that Concept terminal users may have to "settc xn no"
to get proper wrapping at the rightmost column.
22221111.... SSSSEEEEAAAARRRRCCCCHHHHIIIINNNNGGGG FFFFOOOORRRR TTTTHHHHEEEE VVVVIIIISSSSUUUUAAAALLLL HHHHIIIISSSSTTTTOOOORRRRYYYY
Four new editor functions have been added in emacs mode: Two
of them, history-search-backward, bound to M-p (and M-P),
and history-search-forward, bound to M-n (and M-N),
Page 29 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
implement a conventional search mechanism, while the other
two, i-search-back and i-search-fwd, both unbound by
default, implement the emacs-style incremental search.
History-search-backward (history-search-forward) searches
backward (forward) through the history list for previous
(next) occurrence of the beginning of the input buffer as a
command. That is, if the user types:
> echo foo
foo
> ls
filea fileb
> echo bar
bar
>
and then types "echo<ESC>p", the shell will place "echo bar"
in the editing buffer. If another _M-_p was entered, the
editing buffer would change to "echo foo". This capability
is compatible with the plain visual history; if the user
were to then enter ^_P the editing buffer would be changed to
"ls". The pattern used to search through the history is
defined by the characters from the beginning of the line up
to the current cursor position and may contain a shell
globbing pattern. Successive history searches use the same
pattern.
When the incremental search functions are used, a prompt -
"bck:" or "fwd:", depending on the chosen direction -
appears, and characters typed are appended to the search
pattern. The matching command line is placed in the editing
buffer, with the cursor positioned at the point where the
pattern was found (the incremental search will also do
searching within a command line). If the search fails, the
terminal bell is rung, and the ':' in the prompt is changed
to '?'.
If these functions are bound to single characters, and one
of those is typed again during the incremental search, the
search continues in the corresponding direction, with the
pattern unchanged; if the previous search failed, this will
also cause it to "wrap around" the history list. Finally,
the following characters also have a special meaning during
the search:
Delete (or any character bound to _b_a_c_k_w_a_r_d-_d_e_l_e_t_e-_c_h_a_r)
Undo the effect of the last character typed,
deleting a character from the pattern if appropriate.
^G Abort the search, back to the last successful one
if previous search failed, otherwise entire search.
^W Append the rest of the current word to the pattern.
Page 30 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
ESC Terminate the search, leaving current line in buffer.
Any other character, that isn't bound to _s_e_l_f-_i_n_s_e_r_t-
_c_o_m_m_a_n_d, terminates the search, leaving the current command
line in the editing buffer, after which _t_c_s_h interprets the
character as if it was normal input - notably _R_e_t_u_r_n will
cause the current command line to be executed.
In vi mode "vi-search-fwd" (bound to '/') and "vi-search-
back" (bound to '?') can be used to search the visual
history. In command mode '/' or '?' followed by a shell
pattern, searches the visual history for the pattern. The
pattern can be terminated either with a _R_e_t_u_r_n, in which
case the matched history event is placed in the command
buffer or an _E_s_c_a_p_e, in which case the matched history event
is executed. If no history event matches the shell pattern
then the bell is rung.
22222222.... BBBBUUUUIIIILLLLTTTTIIIINNNN WWWWHHHHIIIICCCCHHHH((((1111))))////WWWWHHHHEEEERRRREEEE CCCCOOOOMMMMMMMMAAAANNNNDDDDSSSS
There is now a builtin version of the _w_h_i_c_h(1) command. The
builtin version is just like the original, except that it
correctly reports aliases peculiar to this _t_c_s_h, and builtin
commands. The only other difference is that the builtin
runs somewhere between 10 and 100 times faster. There is
also a key-function interface to this command: the _w_h_i_c_h-
_c_o_m_m_a_n_d function (normally bound to M-?), can be used
anywhere on the command line, and will in effect do a
'which' on the command name.
Similarly where will report all known instances of the
command: aliases, builtins, as well as all references in the
path.
22223333.... RRRREEEESSSSTTTTAAAARRRRTTTTIIIINNNNGGGG AAAA SSSSTTTTOOOOPPPPPPPPEEEEDDDD EEEEDDDDIIIITTTTOOOORRRR
There is another new editor function: run-fg-editor, which
is bound to _M-^_Z. When typed, it saves away the current
input buffer, and looks for a stopped job with a name equal
to the file name part (last element) of either the EDITOR or
VISUAL environment variables (if not defined, the default
names are "ed" and "vi" respectively). If such a job is
found, then it is restarted as if "fg %_n_a_m_e" had been typed.
This is used to toggle back and forth between an editor and
the shell easily. Some people bind this function to ^_Z so
they can do this even more easily.
22224444.... SSSSTTTTAAAATTTTUUUUSSSS LLLLIIIINNNNEEEE SSSSUUUUPPPPPPPPOOOORRRRTTTT
_T_c_s_h has a new builtin called _e_c_h_o_t_c that allows the user to
access the terminal capabilities from the command line,
similar to the system V _t_p_u_t(1).
> echotc home
Page 31 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Places the cursor at the home position and
> echotc cm 3 10
places the cursor at column 3 row 10. This command replaces
the _e_l and _s_l variables that used contain the escape
sequences to begin and end status line changes. The command:
> echo $sl this is a test $el
is replaced by:
> echotc ts 0; echo "this is a test"; echotc fs
In addition _e_c_h_o_t_c understands the arguments _b_a_u_d, _l_i_n_e_s,
_c_o_l_s, _m_e_t_a, and _t_a_b_s And prints the baud rate, the number of
lines and columns, and "yes" or "no" depending if the
terminal has tabs or a meta key. This can be useful in
determining how terse the output of commands will be
depending on the baud rate, or setting limits to commands
like history to the highest number so that the terminal does
not scroll:
> set history=`echotc lines`
> @ history--
Note: Termcap strings may contain wildcard characters, and
echoing them will not work correctly. The suggested method
of setting shell variables to terminal capability strings is
using double quotes, as in the following example that places
the date in the status line:
> set tosl="`echotc ts 0`"
> set frsl="`echotc fs`"
> echo -n "$tosl";date; echo -n "$frsl"
_E_c_h_o_t_c accepts two flags. The flag -_v enables verbose
messages and the flag -_s ignores any errors and returns the
empty string if the capability is not found.
22225555.... EEEEXXXXEEEECCCCUUUUTTTTIIIIOOOONNNN OOOOFFFF AAAA CCCCOOOOMMMMMMMMAAAANNNNDDDD AAAAFFFFTTTTEEEERRRR CCCCHHHHAAAANNNNGGGGIIIINNNNGGGG TTTTHHHHEEEE CCCCUUUURRRRRRRREEEENNNNTTTT WWWWOOOORRRRKKKKIIIINNNNGGGG
DDDDIIIIRRRREEEECCCCTTTTOOOORRRRYYYY
_T_c_s_h now supports a special alias, _c_w_d_c_m_d, which if set
holds a command that will be executed after changing the
value of $cwd. For example, if the user is running on an X
window system _x_t_e_r_m(_1), and a re-parenting window manager
that supports title bars such as _t_w_m(_1) _a_n_d _h_a_s _d_o_n_e:
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd ^G"'
then the shell will change the title of the running _x_t_e_r_m(_1)
Page 32 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
to be the name of the host, a colon, and the full current
working directory. A more fancy way to do that is:
> alias cwdcmd 'echo -n
"^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'
This will put the hostname and working directory on the
title bar but only the hostname in the icon manager menu.
Note that if a user defines _c_w_d_c_m_d to contain a _c_d, _p_u_s_h_d,
or _p_o_p_d, command, an infinite loop may result. In this
case, it is the author's opinion that said user will get
what he deserves.
22226666.... NNNNAAAATTTTIIIIVVVVEEEE LLLLAAAANNNNGGGGUUUUAAAAGGGGEEEE SSSSYYYYSSSSTTTTEEEEMMMM
_T_c_s_h is eight bit clean (if so compiled, see the description
of the _v_e_r_s_i_o_n shell variable below), and will thus support
character sets needing this capability. The _t_c_s_h support
for NLS differs depending on whether it was compiled to use
the system's NLS (again, see the _v_e_r_s_i_o_n variable) or not.
In either case, the default for character classification
(i.e. which characters are printable etc) and sorting is 7-
bit ascii, and any setting or unsetting of the LANG or
LC_CTYPE environment variables will cause a check for
possible changes in these respects.
When using the system's NLS, the _s_e_t_l_o_c_a_l_e C library
function will be called to determine appropriate character
classification and sorting - this function will typically
examine the LANG and LC_CTYPE variables for this purpose
(refer to the system documentation for further details).
Otherwise, NLS will be simulated, by assuming that the ISO
8859-1 character set is used whenever either of the LANG and
LC_CTYPE variables are set, regardless of their values.
Sorting is not affected for the simulated NLS.
In addition, with both real and simulated NLS, all printable
characters in the range \200-\377, i.e. those that have M-
<char> bindings, are automatically rebound to _s_e_l_f-_i_n_s_e_r_t-
_c_o_m_m_a_n_d (the corresponding binding for the escape+<char>
sequence, if any, is left alone). This automatic rebinding
is inhibited if the NOREBIND environment variable is set -
this may be useful for the simulated NLS, or a primitive
real NLS which assumes full ISO 8859-1 (otherwise all M-
<char> bindings in the range \240-\377 will effectively be
undone in these cases). Explicitly rebinding the relevant
keys, using _b_i_n_d_k_e_y, is of course still possible.
Unknown characters (i.e. those that are neither printable
nor control characters) will be printed using the \nnn
format. If the tty is not in 8 bit mode, other 8 bit
characters will be printed by converting them to ascii and
using standout mode. _T_c_s_h will never change the 7/8 bit
Page 33 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
mode of the tty, and will track user-initiated settings for
this - i.e. it may be necessary for NLS users (or, for that
matter, those that want to use a Meta key) to explicitly set
the tty in 8 bit mode through the appropriate _s_t_t_y(1)
command in e.g. the .login file.
22227777.... AAAAUUUUTTTTOOOOMMMMAAAATTTTIIIICCCC PPPPRRRROOOOCCCCEEEESSSSSSSS TTTTIIIIMMMMEEEE RRRREEEEPPPPOOOORRRRTTTTIIIINNNNGGGG
Automatic process time reporting is a feature that exists in
_c_s_h, but it is usually not documented. In addition _t_c_s_h
provides a slightly enriched syntax. Process time reports
are controlled via the _t_i_m_e shell variable. The first word
of the _t_i_m_e variable indicates the minimum number of CPU
seconds the process has to consume before a time report is
produced. The optional second word controls the format of
the report. The following sequences are available for the
format specification:
%U The time the process spent in user mode
in cpu seconds.
%S The time the process spent in kernel mode
in cpu seconds.
%E The elapsed time in seconds.
%P The CPU percentage computed as (%U + %S) / %E.
The following sequences are supported only in systems that
have the BSD resource limit functions.
%W Number of times the process was swapped.
%X The average amount in (shared) text space used
in Kbytes.
%D The average amount in (unshared) data/stack
space used in Kbytes.
%K The total space used (%X + %D) in Kbytes.
%M The maximum memory the process had in use at
any time in Kbytes.
%F The number of major page faults (page needed to
be brought from disk).
%R The number of minor page faults.
%I The number of input operations.
%O The number of output operations.
%r The number of socket messages received.
%s The number of socket messages sent.
%k The number of signals received.
%w Number of voluntary context switches (waits).
%c Number of involuntary context switches.
The default time format is "%Uu %Ss %E %P %X+%Dk %I+%Oio
%Fpf+%Ww" for systems that support resource usage reporting
and "%Uu %Ss %E %P" for systems that do not.
For Sequent's DYNIX/ptx %X, %D, %K, %r and %s are not
supported. However, the following additional sequences are
Page 34 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
available.
%Y The number of system calls performed.
%Z The number of pages which are zero-filled
on demand.
%i The number of times a process' resident
set size was increased by the kernel.
%d The number of times a process' resident
set size was decreased by the kernel.
%l The number of read system calls performed.
%m The number of write system calls performed.
%p the number of reads from raw disk devices.
%q the number of writes to raw disk devices.
The default time format for Sequent's DYNIX/ptx is "%Uu %Ss
$E %P %I+%Oio %Fpf+%Ww". Also note that the CPU percentage
can be higher than 100% on multi-processors.
22228888.... OOOOSSSS////DDDDEEEEPPPPEEEENNNNDDDDEEEENNNNTTTT BBBBUUUUIIIILLLLTTTTIIIINNNN SSSSUUUUPPPPPPPPOOOORRRRTTTT
_T_R_A_N_S_P_A_R_E_N_T _C_O_M_P_U_T_I_N_G _F_A_C_I_L_I_T_Y
On systems that support TCF (aix-ibm370, aix-ps2) the
following builtins have been added:
ggggeeeettttssssppppaaaatttthhhh Print the current system execution path.
sssseeeettttssssppppaaaatttthhhh LLLLOOOOCCCCAAAALLLL||||<<<<ssssiiiitttteeee>>>>||||<<<<ccccppppuuuu>>>> ............
Set the current execution path.
ggggeeeettttxxxxvvvveeeerrrrssss Print the current experimental version prefix.
sssseeeettttxxxxvvvveeeerrrrssss [[[[<<<<ssssttttrrrriiiinnnngggg>>>>]]]]
If the optional string is ommited, any
experimental version prefix is removed. Otherwise
the experimental version prefix is set to string.
mmmmiiiiggggrrrraaaatttteeee [[[[----<<<<ssssiiiitttteeee>>>>]]]] <<<<ppppiiiidddd>>>>||||%%%%<<<<jjjjoooobbbbiiiidddd>>>> ............
mmmmiiiiggggrrrraaaatttteeee ----<<<<ssssiiiitttteeee>>>>
The first form migrates the process or job to the
site specified or the default site determined by
the system path. The second form, is equivalent
to 'migrate -<site> $$', i.e. migrates the current
process to the site specified. Note: migrating
_t_c_s_h itself can cause unexpected behavior, since
the shell does not like to lose its tty.
In addition, jobs will print the site the job is executing.
Page 35 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
_D_o_m_a_i_n/_O_S _S_u_p_p_o_r_t
iiiinnnnlllliiiibbbb <<<<sssshhhhaaaarrrreeeedddd----lllliiiibbbbrrrraaaarrrryyyy>>>> ............
Inlib adds shared libraries to the current environment.
There is no way to remove them...
rrrroooooooottttnnnnooooddddeeee ////////<<<<nnnnooooddddeeeennnnaaaammmmeeee>>>>
Change the name of the current rootnode. From now on, /
will resolve to //<_r_o_o_t_n_o_d_e>
vvvveeeerrrr [[[[<<<<ssssyyyyssssttttyyyyppppeeee>>>>]]]] [[[[<<<<ccccoooommmmmmmmaaaannnndddd>>>>]]]]
Without arguments, print $_S_Y_S_T_Y_P_E; with the <_s_y_s_t_y_p_e>
provided, set _S_Y_S_T_Y_P_E to the one provided. Valid
systypes are bsd4.3 and sys5.3. If a <_c_o_m_m_a_n_d> is
argument is given, then <_c_o_m_m_a_n_d> is executed under the
<_s_y_s_t_y_p_e> specified.
_M_a_c_h
sssseeeettttppppaaaatttthhhh <<<<ppppaaaatttthhhh----ssssppppeeeecccc>>>> ............
XXX: What does it do?
_M_a_s_s_c_o_m_p/_R_T_U
uuuunnnniiiivvvveeeerrrrsssseeee <<<<uuuunnnniiiivvvveeeerrrrsssseeee----ssssppppeeeecccc>>>> ............
Sets the current universe to the specified parameter.
_C_o_n_v_e_x/_O_S
wwwwaaaarrrrpppp [[[[<<<<uuuunnnniiiivvvveeeerrrrsssseeee----ssssppppeeeecccc>>>>]]]] ............
Without arguments prints the current value of the
universe. With a universe argument it sets the current
universe to the value of the argument.
22229999.... WWWWIIIINNNNDDDDOOOOWWWW SSSSIIIIZZZZEEEE TTTTRRRRAAAACCCCKKKKIIIINNNNGGGG
On systems that support SIGWINCH or SIGWINDOW, _t_c_s_h adapts
to window resizing automatically and adjusts the environment
variables LINES and COLUMNS if set. Also if the environment
variable TERMCAP contains li#, and co# fields, these will be
adjusted also to reflect the new window size.
33330000.... IIIINNNNPPPPUUUUTTTT FFFFIIIILLLLEEEESSSS
On startup _t_c_s_h will try to source /_e_t_c/_c_s_h._c_s_h_r_c and then
/_e_t_c/_c_s_h._l_o_g_i_n if the shell is a login shell. Then it will
try to source $_H_O_M_E/._t_c_s_h_r_c and then $_H_O_M_E/._c_s_h_r_c if
$_H_O_M_E/._t_c_s_h_r_c is not found. Then it will source $_H_O_M_E/._l_o_g_i_n
if the shell is a login shell. On exit _t_c_s_h will source
first /_e_t_c/_c_s_h._l_o_g_o_u_t and then $_H_O_M_E/._l_o_g_o_u_t if the shell
was a login shell.
Page 36 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Note: On _c_o_n_v_e_x_o_s, _s_t_e_l_l_i_x and _I_N_T_E_L the names of the system
default files are /_e_t_c/_c_s_h_r_c , /_e_t_c/_l_o_g_i_n and /_e_t_c/_l_o_g_o_u_t
respectively. On the NeXT the names are also different:
/_e_t_c/_c_s_h_r_c._s_t_d , /_e_t_c/_l_o_g_i_n._s_t_d and /_e_t_c/_l_o_g_o_u_t._s_t_d Finally
on _i_r_i_x, _A/_U_X, _A_M_I_X, and the _c_r_a_y only the file /_e_t_c/_c_s_h_r_c
is executed if the shell is a login shell.
33331111.... CCCCOOOOMMMMMMMMAAAANNNNDDDD LLLLIIIINNNNEEEE OOOOPPPPTTTTIIIIOOOONNNNSSSS
This section describes options that are either undocumented
in _c_s_h (*) or present only in _t_c_s_h. (+)
-_d Force load of directory stack. (+)
-_D_n_a_m_e[=_v_a_l_u_e]
Set environment variable name to value. (Domain/OS only)
(+)
-_F Use fork() instead of vfork() to spawn processes.
(Convex/OS only) (+)
-_l Make _t_c_s_h behave like a login shell. (+)
-_m Allow reading of a .cshrc that does not belong to the
effective user. Newer versions of _s_u(_1) can pass that to
the shell. (some versions of csh have it) (+*)
-_q Make the shell accept SIGQUIT, and behave when it is
used under a debugger. Job control is disabled. (*)
33332222.... HHHHIIIISSSSTTTTOOOORRRRYYYY AAAANNNNDDDD VVVVAAAARRRRIIIIAAAABBBBLLLLEEEE MMMMOOOODDDDIIIIFFFFIIIIEEEERRRR EEEENNNNHHHHAAAANNNNCCCCEEEEMMMMEEEENNNNTTTTSSSS
_T_c_s_h accepts more than one variable modifier per variable or
history expansion. For example, in _c_s_h(_1) the following
command expands to:
% set a=/usr/local/foo.bar.baz
% echo $a:t:r:e
foo.bar.baz:r:e
but in _t_c_s_h:
> set a=/usr/local/foo.bar.baz
> echo $a:t:r:e
bar
This bug fix changes slightly the input syntax of _c_s_h,
causing expressions of the form to have invalid syntax:
> set a=/usr/local/foo.bar.baz
> echo $a:t:$cwd
Page 37 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Unknown variable modifier.
Which is the correct behavior, since after the second colon
a variable modifier is expected and `$' is found.
Expressions like this should be re-written as:
> echo ${a:t}:$cwd
_T_c_s_h can also use the _l and _u modifiers to change the case
of a word.
Also _t_c_s_h has an additional : character _a which applies the
current modifier multiple times in the same word, in the
same way _g applies the modifier once in each word:
> set foo=(a:b:c d:e:f)
> echo $foo:s/:/ /
a b:c d:e:f
> echo $foo:gs/:/ /
a b:c d e:f
> echo $foo:as/:/ /
a b c d:e:f
> echo $foo:ags/:/ /
a b c d e f
The _c_s_h expert will notice in the above example another _t_c_s_h
enhancement. In _c_s_h the _s modifier does not work for
variables.
The _a character works correctly with other modifiers, for
example:
> echo $host
tesla.ee.cornell.edu
> echo $host:r
tesla.ee.cornell
> echo $host:ar
tesla
_N_o_t_e: The _a character causes a modifier to be applied to a
word repeatedly until the modifier fails. This can lead to
an infinite loop in the current implementation when used
with the _s modifier. For example :as/f/ff/ will never
terminate. This behavior might change in the future.
33333333.... PPPPRRRROOOOGGGGRRRRAAAAMMMMMMMMAAAABBBBLLLLEEEE CCCCOOOOMMMMPPPPLLLLEEEETTTTIIIIOOOONNNN
The new _c_o_m_p_l_e_t_e and _u_n_c_o_m_p_l_e_t_e builtins can change the
behavior of the listing and file-completion in tcsh. For
example some commands like _c_d, _p_u_s_h_d, _p_o_p_d , _m_k_d_i_r(_1),
_r_m_d_i_r(_1) accept only directories as arguments. Normally
_t_c_s_h when asked to list or complete an argument for those
Page 38 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
commands takes into account all the files and not only
directories. This behavior can be changed by telling _t_c_s_h
that these commands only expect directory arguments:
> complete cd 'n/*/d/'
The above command tells _t_c_s_h to complete any following word
with a directory.
The syntax for the _c_o_m_p_l_e_t_e and _u_n_c_o_m_p_l_e_t_e builtins is:
_c_o_m_p_l_e_t_e [<_c_o_m_m_a_n_d-_p_a_t_t_e_r_n> [<_c_o_m_p_l_e_t_i_o_n-_a_r_g_u_m_e_n_t>]]
_u_n_c_o_m_p_l_e_t_e <_c_o_m_m_a_n_d-_p_a_t_t_e_r_n>
Completion arguments are matched in turn from left to right
and the first successful match is returned. There are three
different completion arguments, modeled after the _s_e_d(_1)
substitute command and they are of the form:
<<<<ccccoooommmmmmmmaaaannnndddd>>>>////<<<<mmmmaaaattttcccchhhh----ppppaaaatttttttteeeerrrrnnnn>>>>////<<<<ccccoooommmmpppplllleeeetttteeee----aaaaccccttttiiiioooonnnn>>>>////[[[[<<<<ssssuuuuffffffffiiiixxxx>>>>||||////]]]]
The five commands available are:
pppp This specifies position-dependent completion. The
matching pattern is a numeric range similar to the one
used to index shell variables. If the current word is
within that range, then the completion action is taken.
For example:
> complete cd 'p/1/d/'
completes only the first argument of 'cd' with a
directory. A special useful case of position-dependent
completion can be used to disambiguate command
completion:
> set autolist
> co[TAB]
complete compress
> complete -co* 'p/0/(complete)/'
> co[TAB]
> complete _
The above command tells the completion mechanism to
match any word on position 0, that matches the pattern
_c_o* . If a match is found, the word is replaced with
the literal pattern "complete". The leading '-' in the
pattern signifies that this completion is to be used
only with ambiguous commands.
nnnn,,,,NNNN This command specifies next-word completions. The
matching pattern in this case is a shell pattern that
Page 39 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
must match the previous word on the command line (_n),
or the word before that (_N). For example:
> complete find 'n/-user/u/'
Here the argument of the find command which follows the
-user argument is completed from the list of users.
cccc,,,,CCCC The last two completion commands complete the current
word. The matching pattern in this case must match the
prefix of the current word. For example:
> complete cc 'c/-I/d/'
completes the the word containing -I from the list of
directories. While ````cccc'''' discards the matched prefix,
````CCCC'''' keeps it and applies the completion using it.
So far the _d, _u, (_w_o_r_d) completion actions have been
mentioned. The complete list of completion actions are:
C Complete completions
S Complete signals
a Complete aliases
b Complete binding
c Complete command
d Complete directory
e Complete environment variable
f Complete file or path component
j Complete jobs
l Complete limits
n Complete nothing
p Complete files using the supplied pathname prefix
s Complete shell variable
t Complete non directory `text' filename
v Complete any variable
u Complete username
x Explain what argument when listing is requested.
$var Complete using words from variable
(...) Complete using words from list
`...` Complete evaluating word list from the output of command.
All the above completion actions, except _x, $_v_a_r, (...), and
`...` can have an additional shell pattern which must match
the files to be completed, separated from the action with a
':'. The '_x' completion action instead expects the
explanation string specified this way. For example, in the
C compiler, it makes sense to complete only files that the
compiler understands:
> complete cc 'n/*/f:*.[cao]/'
Page 40 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
It is also useful to exclude files from the completion list.
Normally _t_c_s_h will expand the following command:
> set fignore=(.o)
> ls
foo.c foo.o
> vi f[TAB]
> vi foo.c
> rm f[TAB]
> rm foo.c
A better way to do this is to use the _c_o_m_p_l_e_t_e builtin to
protect precious files:
> complete rm 'n/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/'
> ls
foo.c foo.o
> vi f[TAB]
> vi foo.c
> rm f[TAB]
> rm foo.o
Note that _f_i_g_n_o_r_e is not used when a shell pattern is
specified in a completion action.
Other commands don't expect files as arguments, so the
completion builtin can be used to change the list of items
to be completed:
> complete man 'n/*/c/' # complete commands
> complete which 'n/*/c/'
> complete dbx 'p/2/(core)/' 'n/*/c/'
> complete alias 'p/1/a/' # complete aliases
> complete set 'p/1/s/' # complete variables
> complete finger 'p/1/u/' # complete user-names
Note that in the _d_b_x example, the positional completion is
specified before the next word completion. Since completions
are evaluated from left to right, if the next word
completion was specified first it would always match and the
positional completion would never be executed. This is a
common mistake when defining a completion.
In some cases the list needs to be customized or dynamically
generated.
> set hostnames=(prep.ai.mit.edu tesla.ee.cornell.edu)
> complete rlogin 'p/1/$hostnames/'
Consider a complex example using matching patterns to direct
argument dependent completions:
> complete find 'n/-fstype/(nfs 4.2)/' 'n/-name/f/' \
Page 41 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
'n/-type/(c b d f p l s)/' 'n/-user/u/' 'n/-exec/c/' \
'n/-ok/c/' 'n/-cpio/f/' 'n/-ncpio/f/' 'n/-newer/f/' \
'c/-/(fstype name perm prune type user nouser \
group nogroup size inum atime mtime ctime exec \
ok print ls cpio ncpio newer xdev depth)/' \
'n/*/d/'
The words following the -_f_s_t_y_p_e and -_t_y_p_e arguments is to be
completed from the lists specified. The word following the
-_n_a_m_e, -_c_p_i_o, -_n_c_p_i_o, and -_n_e_w_e_r arguments are to be
completed using files or directory components. The word
following the -_u_s_e_r argument will be completed from the list
of user names of the system, and the word following the -
_e_x_e_c and -_o_k arguments will be completed from the list of
commands. The fourth line specifies how the current word
will be completed if it starts with a -. Note that the
pattern of this completion argument refers to the _c_u_r_r_e_n_t
word and not to the _p_r_e_v_i_o_u_s word, like before. Finally the
last line in the find completion matches all the remaining
cases and requires a directory component.
> cd /usr
> set autolist
> find [TAB]
bin/ include/ lib/ local/ man/ src/
> find -[TAB]
atime depth group mtime newer ok prune user
cpio exec inum name nogroup perm size xdev
ctime fstype ls ncpio nouser print type
> find -u[TAB]
> find -user [TAB]
christos root
> find -user c[TAB]
> find -user christos
Another useful feature is to override the default suffix
rules. For example:
> complete rcp 'c/*:/f/' 'p/1/$hosts/:'
> complete finger 'c/*@/$hosts/' 'p/1/u/@'
completes from $hosts appending a `:' and then begins
expanding files, where finger expands user-names appending
an `@' and then begins expanding hosts.
Another exotic example that makes use of dynamic command
execution is:
> complete talk p/1/'`users | tr " " "\012" | uniq`'/ \
n/\*/\`who\ \|\ grep\ \$:1\ \|\ awk\ \'\{\ print\ \$2\ \}\'\`/
Page 42 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Here we want to get a list of the active users, as an
argument to talk, then we want to pick the user, and find
his tty... Note that there is no quoting performed inside
the completion patterns. If the character '/' is used in
the matched pattern, then another punctuation character can
be used as a separator. The only pattern recognized is
$$$$::::<<<<nnnnuuuummmmbbbbeeeerrrr>>>> which is substituted by the n'th word of the
current line.
Notes:
1. The completion command-patterns are overridden when the
internal parsing mechanism determines that the
completion is a login name, or a variable.
2. This is an experimental feature and the syntax/behavior
may change in future versions.
FFFFYYYYIIII
This shell uses CBREAK mode but takes typed-ahead characters
anyway. You can still use _s_t_t_y(1) to set some of the modes
of your terminal (but not bindings).
This shell will restore your tty to a sane mode if it
appears to return from some command in raw, CBREAK, or
noecho mode. This behavior can be changed using _s_e_t_t_y.
EEEENNNNHHHHAAAANNNNCCCCEEEEDDDD FFFFIIIILLLLEEEE IIIINNNNQQQQUUUUIIIIRRRRIIIIEEEESSSS
_C_s_h allows the following file inquiries that can appear as
primitive operands in expressions. They are for the form -_l
<_f_i_l_e_n_a_m_e>.
r read access
w write access
x execute access
e existence
o ownership
z zero size
f plain file
d directory
l symbolic link *
_T_c_s_h defines also the following:
c character special file
b block special file
p named pipe (fifo) *
u set-user-ID bit is set
g set-group-ID bit is set
k sticky bit is set
Page 43 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
s the file is non-zero size.
t open file descriptor for terminal device [a number]
S socket special file *
X executable in the path or shell builtin
Notes: On systems without the file types indicated by * the
file inquiry operands return false.
If tcsh is compiled for POSIX [i.e. POSIX is defined in
config.h], then the result of test is based on the
permission bits of the file and not on the result of the
_a_c_c_e_s_s(_2) system call. I.e. if you mount a file system
read-only, and test -w a file, then the test will succeed in
POSIX mode, if the permissions of the file allow writing.
RRRREEEEAAAADDDDOOOONNNNLLLLYYYY VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS
_T_c_s_h allows defining variables as readonly. Such variables
cannot be cleared or modified. E.g.
> set -r x=(1 2 3)
> unset x
unset: $x is read-only.
> set x=5
set: $x is read-only.
> set -r x=5
set: $x is read-only.
> echo $x
1 2 3
In addition 'set -r' will list only the readonly variables.
EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT
HPATH -- path to look for command documentation
LANG -- used to give preferred character environment (see
NLS)
LC_CTYPE -- used to change only ctype character handling
(see NLS)
NOREBIND -- inhibits rebinding of printable characters to
self-insert-command
PATH -- path to look for command execution
SHLVL -- current shell level nesting
TERM -- used to tell how to handle the terminal
LINES -- Number of lines in terminal (see WINDOW SIZE)
COLUMNS -- Number of columns in terminal (see WINDOW SIZE)
TERMCAP -- Terminal capability string (see WINDOW SIZE)
SYSTYPE -- The current system type (Domain OS only)
NNNNEEEEWWWW SSSSHHHHEEEELLLLLLLL VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS
aaaaddddddddssssuuuuffffffffiiiixxxx add a / for directories, and a space for normal
files when complete matches a name exactly. If
Page 44 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
unset don't add anything extra.
aaaammmmppppmmmm show all times in 12 hour, AM/PM format.
aaaauuuuttttooooccccoooorrrrrrrreeeecccctttt
Correct mis-spelled path components automatically
before attempting completion.
aaaauuuuttttooooeeeexxxxppppaaaannnndddd
invoke the expand-history function automatically
on completion.
aaaauuuuttttoooolllliiiisssstttt list possibilities on an ambiguous completion.
aaaauuuuttttoooollllooooggggoooouuuutttt
The first word indicates number of minutes of
inactivity before automatic logout. The optional
second word indicates the number of minutes of
inactivity after which the user will be prompted
for his login password to enter a command.
bbbbaaaacccckkkkssssllllaaaasssshhhh____qqqquuuuooootttteeee
makes the backslash quote \, ', and ". This option
changes the parsing mechanism for tcsh, and it can
cause syntax errors in _c_s_h scripts.
ccccoooorrrrrrrreeeecccctttt automatically try to correct the spelling of
commands. Must be set to either correct=cmd, only
command name will be corrected, or correct=all,
the whole line will be corrected.
ddddeeeexxxxttttrrrraaaacccctttt extract a directory on pushd rather than rotating.
ddddiiiirrrrssssffffiiiilllleeee If set, it contains the full path-name where a
directory stack file is read/written. It defaults
to $home/.cshdirs. This file is executed last
after .cshrc and .login to restore the directory
stack.
ddddiiiirrrrssssttttaaaacccckkkk If set, it contains an array of all the
directories on the directory stack. $dirstack[1]
is the current working directory, $dirstack[2] the
first directory on the stack etc. Setting
$dirstack resets all the stack entries, but the
current working directory which is preserved.
dddduuuunnnniiiiqqqquuuueeee Push only directories that are not already in the
directory stack.
eeeecccchhhhoooo____ssssttttyyyylllleeee
Set the style of the builtin echo. Valid values
are:
Page 45 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
_b_s_d : if the first argument is -n, don't echo a
newline.
_s_y_s_v : recognize \ escape sequences in echo strings.
_b_o_t_h : recognize both -n and \ escape sequences.
_n_o_n_e : the purist's echo.
eeeeddddiiiitttt use the input editor, set by default.
ffffiiiiggggnnnnoooorrrreeee list of file name suffixes (e.g. .o, ~) to ignore
during complete.
ggggiiiidddd the current real group id.
hhhhiiiissssttttlllliiiitttt If set, history lines in the editor will be shown
with its literal value (that is the line as it was
input) instead of the shells lexical version. The
current history line can be toggled between
literal and lexical with the toggle-literal-
history function. History lines saved at shell
exit are also saved as this variable indicates.
hhhhiiiissssttttffffiiiilllleeee If set, it contains the full path-name where a
history file is read/written. It defaults to
$home/.history. This is useful when sharing the
same home directory in different machines, or if
one wants to save all the histories in the tty
sessions. It is usually set in .cshrc for
interactive shells, because history is sourced
between .cshrc and .login so that it is available
from .login.
hhhhiiiissssttttoooorrrryyyy The first word of the history variable indicates
the number of history events to be saved. The
optional second word indicates the format history
is printed (Defaults to "%h\t%T\t%R\n").
iiiinnnnppppuuuuttttmmmmooooddddeeee Can be set to either _i_n_s_e_r_t or _o_v_e_r_w_r_i_t_e to
control the line editing behavior, as described in
section 1.
lllliiiissssttttjjjjoooobbbbssss list all jobs when suspending. set listjobs=long,
produces long format.
lllliiiissssttttlllliiiinnnnkkkkssss Resolve symbolic links when listing files so that
the correct filetype is shown.
lllliiiissssttttmmmmaaaaxxxx maximum number of items to list without asking
first.
Page 46 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
lllliiiissssttttmmmmaaaaxxxxrrrroooowwwwssss
maximum number of rows of items to list without
asking first. (local AFEB hack at University of
Twente)
mmmmaaaattttcccchhhhbbbbeeeeeeeepppp control beeping on completion. With
matchbeep=nomatch, completion only beeps when
there is no match, with matchbeep=ambiguous, beeps
also when there are multiple matches, with
matchbeep=notunique, beeps when there is one exact
and other longer matches, with matchbeep=never, it
never beeps.
nnnnoooobbbbeeeeeeeepppp Disables beeping completely.
nnnnooookkkkaaaannnnjjjjiiii If kanji support is enable, setting this variable
disables it, so that the meta key can be used.
nnnnoooossssttttaaaatttt An list of directories that should not be stat'ed
during a completion operation. Some directories
e.g. "/afs", can take too much time to complete a
_s_t_a_t(_2) operation, making them prime candidates
for membership in this list.
ooooiiiidddd The organization id number (Domain OS only).
pppprrrriiiinnnntttteeeexxxxiiiittttvvvvaaaalllluuuueeee
if an interactive program exits non-zero, print
the exit value.
pppprrrroooommmmpppptttt the string to prompt with.
pppprrrroooommmmpppptttt2222 the string to prompt for while and for loops with.
pppprrrroooommmmpppptttt3333 the string to prompt with when automatic spelling
correction has corrected a command line.
ppppuuuusssshhhhddddttttoooohhhhoooommmmeeee
make pushd with no args do a "pushd ~" (like cd
does).
ppppuuuusssshhhhddddssssiiiilllleeeennnntttt
do not print the dir stack on every pushd and
popd.
rrrreeeecccceeeexxxxaaaacccctttt recognize exact matches even if they are
ambiguous.
rrrreeeeccccooooggggnnnniiiizzzzeeee____oooonnnnllllyyyy____eeeexxxxeeeeccccuuuuttttaaaabbbblllleeeessss
list choices of commands only displays files in
the path that are executable (slow).
Page 47 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
rrrrmmmmssssttttaaaarrrr Prompt the user before execution of `rm *'.
ssssaaaavvvveeeeddddiiiirrrrssss Before exiting, create a file called
$HOME/.cshdirs that contains the necessary
commands to restore the current directory stack.
_T_c_s_h will read this file during startup and
restore the directory stack.
ssssaaaavvvveeeehhhhiiiisssstttt number of history items to save between login
sessions. If it is just set, the number of items
is taken from $history.
sssshhhhllllvvvvllll Integer value indicating the number of nested
shells. On login shells the level is reset to 1.
sssshhhhoooowwwwddddoooottttssss show hidden files in list and complete operations.
If it is set to -A, then "." and ".." are not
displayed, similarly to the BSD ls -A.
ssssyyyymmmmlllliiiinnnnkkkkssss can be set to: _c_h_a_s_e , in order to resolve the
full path names, _i_g_n_o_r_e , in order to use $cwd to
resolve relative directory references for
builtins. _e_x_p_a_n_d , in order to use $cwd and
rewrite the arguments for commands.
ttttccccsssshhhh Contains the current version of the shell as
R.VV.PP. The _R indicates the major release number,
the _V_V the current version and the _P_P the
patchlevel.
tttteeeerrrrmmmm the terminal type; see above.
ttttppppeeeerrrriiiioooodddd periodic command wait period (in minutes).
ttttttttyyyy The name of the tty, or empty if not attached to
one.
uuuuiiiidddd the current real user ID.
vvvveeeerrrrssssiiiioooonnnn the version ID stamp for this _t_c_s_h. It contains,
the origin of this version of _t_c_s_h, the date this
version was released and a string containing a
comma separated list of the compile time options
enabled:
8b 7b If tcsh was compiled to be eight bit clean
or not. The default is 8b.
nls Set if tcsh uses the system's NLS, should be
the default for systems that have NLS.
lf Set if tcsh should execute .login before
.cshrc on login shells. Default is not set.
dl Set if tcsh should put . last on the path
for security. Default is set.
Page 48 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
vi Set if tcsh's default editor is vi. Default
is unset (emacs)
dtr Set if tcsh should drop dtr on login shells
when exiting. Default is unset.
bye Set if tcsh should accept bye in addition
to logout, and rename log to watchlog.
Default is unset.
al Set if tcsh should determine if autologout
should be enabled. The default is set.
kan Set if tcsh is compiled for Kanji.
(ignore the iso character set.) Default is unset.
sm Set if tcsh was compiled to use the system's malloc.
hb Set if tcsh is emulating #!<program> <args> in
shell script execution
In addition to the above strings, administrators can enter
local strings to indicate differences in the local version.
vvvviiiissssiiiibbbblllleeeebbbbeeeellllllll
use the visible bell (screen flash) rather than
audible bell.
wwwwaaaattttcccchhhh list of events to watch.
wwwwhhhhoooo format string for the printouts generated when
_w_a_t_c_h is set.
wwwwoooorrrrddddcccchhhhaaaarrrrssss list of non-alphanumeric characters considered
part of a word for the purpose of the forward-
word, backward-word etc functions -- defaults to
"*?_-.[]~=".
NNNNEEEEWWWW SSSSPPPPEEEECCCCIIIIAAAALLLL AAAALLLLIIIIAAAASSSSEEEESSSS
_c_w_d_c_m_d the command is run after every change of working
directory.
_p_e_r_i_o_d_i_c the command to be run every _t_p_e_r_i_o_d minutes.
_p_r_e_c_m_d the command to be run prior to printing each
prompt.
_b_e_e_p_c_m_d the command to be run every time _t_c_s_h wants to
echo the terminal bell.
SSSSEEEEEEEE AAAALLLLSSSSOOOO
xterm(1), twm(1), csh(1), chsh(1), termcap(5), termio(7)
BBBBUUUUGGGGSSSS
The screen update for lines longer than the screen width is
very poor if the terminal cannot move the cursor up (i.e.
terminal type "dumb").
Page 49 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
I am certain that there are bugs. Bugs (preferably with
fixes) should be sent to Christos Zoulas
(christos@ee.cornell.edu).
VVVVEEEERRRRSSSSIIIIOOOONNNN
This man page documents tcsh 6.04.00 (Cornell) 93/07/03.
AAAAUUUUTTTTHHHHOOOORRRRSSSS
Ken Greer, HP Labs, 1981
Wrote the command completion.
Mike Ellis, Fairchild, 1983
Added command name recognition/completion.
Paul Placeway, Ohio State CIS dept., 1983
Added the command line editor.
Rayan Zachariassen, University of Toronto, 1984
Added the builtin _w_h_i_c_h feature to the editor, and the code
for _l_s-_F . Also numerous bug fixes, modifications, and
performance enhancements.
Chris Kingsley, Caltech
Wrote the fast storage allocator routines (nmalloc.c).
Karl Kleinpaste, CCI 1983-4
Added special aliases, directory stack extraction stuff,
login/logout watch, and scheduled events. Also came up with
the idea of the new prompt format.
Paul Placeway, Ohio State CIS dept., 1987
Re-wrote the editor, cleaned up other code, and added the
prompt routines, added to the syntax for file name
expressions, and sped up the shell some.
Chris Grevstad, TRW, 1987
Ported the 4.3 csh sources to tcsh.
Christos S. Zoulas, Cornell U. EE dept., 1987-92
ported tcsh to HPUX, and System V rel. 2 and 3 and wrote a
SysV version of getwd.c. Added SHORT_STRINGS support. New
version of sh.glob.c.
James J Dempsey, BBN, 1988, and Paul Placeway, OSU, 1988
Re-ported tcsh to A/UX.
BBBBUUUUGGGGFFFFIIIIXXXXEEEESSSS AAAANNNNDDDD EEEENNNNHHHHAAAANNNNCCCCEEEEMMMMEEEENNNNTTTTSSSS
Tim P. Starrin, National Aeronautics and Space
Administration, Langley Research Center Operations, 1993
Readonly variable additions.
Page 50 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Jeff Fink, 1992
Added complete-word-fwd, and complete-word-back editor
functions
Harry C. Pulley, 1992
Coherent port
Andy Phillips, Mullard Space Science Lab U.K., 1992
VMS-POSIX port.
Beto Appleton, IBM Corp., 1992
Walking process group fixes, lots of misc csh bug fixes,
POSIX file tests, POSIX SIGHUP.
Scott Bolte, Cray Computer Corp., 1992
CSOS port.
Kaveh R. Ghazi, Rutgers University, 1992
Fixes and Ports for Tek, m88k, Titan, Masscomp.
Mark Linderman, Cornell University, 1992
OS/2 Port, (he does not run OS/2 anymore so he cannot help
you porting tcsh on it)
Mika Liljeberg, liljeber@kruuna.Helsinki.FI, 1992
Linux port.
Scott Krotz, Motorola, 1991
Minix port.
David Dawes, Sydney U. Australia, Physics dept., 1991
SVR4 job control fixes. (reverse pipeline startup code, and
signal fixes).
Jose Sousa, Interactive Systems Corp., 1991
Extended vi fixes. Added delete command in vi.
Marc Horowitz, MIT, 1991
Ansification fixes, new exec hashing code, imake fixes,
where builtin.
Eric Schnoebelen, Convex, 1990
Convex support, lots of csh bug fixes, save and restore of
directory stack.
Jaap Vermeulen, Sequent, 1990-91
Vi mode fixes, expand-line, window change fixes, ported to
symmetry machines.
Ron Flax, Apple, 1990
Ported again to A/UX 2.0
Page 51 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Dan Oscarsson, LTH Sweden, 1990
NLS support and simulated for non NLS sites. Correction of
file names also handles the case when the / is replaced by
another character. The editor does not switch into cbreak
mode unless needed. The shell will not use character
attributes when output is not to a tty.
Johan Widen, SICS Sweden, 1990
Shell level variable, mach support, correct-line, 8-bit
printing.
Matt Day, Sanyo Icon, 1990
Added POSIX termio support; Fixed limit stuff for SysV.
Hans J. Albertsson (Sun Sweden)
Added the ampm variable handling, DING!, and the settc and
telltc builtins.
Michael Bloom
Fixed some of the interrupt handling.
Michael Fine, Digital Equipment Corp
added the extended key support.
Daniel Long, NNSC, 1988
Added the wordchars variable.
George Hartzell, MCD Biology, University of Colorado-
Boulder, 1988
Fixed the always resetting to DEL bug.
Patrick Wolfe, Kuck and Associates, Inc., 1988
Cleaned up VI mode and wrote the new editor description (in
section 1).
Jak Kirman, 1988
Fixed the SunOS 4 giant stack allocation bug.
Bruce Robertson, Tektronix, 1989
Fixed setting erase and kill (again).
David C Lawrence, Rensselaer Polytechnic Institute, 1989
Added "autolist" variable and code to list possibilities on
ambiguous completion.
Martin Boyer, Institut de recherche d'Hydro-Quebec, 1991.
Modified "autolist" variable and code to give options on
beeping behavior. Modified the history search to search for
the whole string from the beginning of the line to the
cursor.
Alec Wolman, DEC, 1989
Page 52 (printed 3/9/94)
TTTTCCCCSSSSHHHH((((1111)))) CCCCoooorrrrnnnneeeellllllll 6666....00004444....00000000 ((((3333 JJJJuuuullllyyyy 1111999999993333)))) TTTTCCCCSSSSHHHH((((1111))))
Added code to allow newlines in the prompt.
Matt Landau, BBN, 1989
Fixed YP bugs on Suns, added .tcshrc stuff.
Ray Moody, Purdue Physics, 1989
Added the code to do magic spacebar history expansion.
Mordechai ????, Intel, 1989
Re-arranged the printprompt() routine to use a switch(*cp)
(rather than a bunch of ifs), and added a few things to it.
Josh Siegel, dspo.gov, 1989
Fixed "fg-editor" and added the status line shell variables
"sl" and "el".
Karl Berry, UMB, 1989
Fixed a bug involving environ (in sh.func.c) on NeXT
computers.
Michael Greim, Universitaet des Saarlandes, Saarbruecken,
W-Germany,
Fixed the nested backquote bug (yes, you can do it; think
about aliases) in 4.2 csh. This fix was posted to
comp.bugs.4bsd.
Kazuhiro Honda, Department of Computer Science, Keio
University, 1989
Added the code for automatic spelling correction, the
prompt3 stuff (the autocorrect prompt), and HOSTTYPE symbols
for the Sony NEWS.
Paul Placeway, BBN, 1990
Fixed character redrawing code insert bugs, and made
redrawing code handle multiple character movement, insert,
and delete (if it exists). Fixed setting of SHELL.
Per Hedeland, Ellemtel, Sweden, 1990
Various bugfixes and improvements, e.g. in history
expansion, autolist, added autoexpand, updated the manual.
TTTTHHHHAAAANNNNKKKKSSSS TTTTOOOO
A special thanks to: Bryan Dunlap, Clayton Elwell, Karl
Kleinpaste, Bob Manson, Steve Romig, Diana Smetters, Bob
Sutterfield, Mark Verber, Elizabeth Zwicky, and all the
other people at Ohio State for suggestions and
encouragement.
Also, thanks to all the people on the net for putting up
with, reporting bugs in, and suggesting new additions to the
old tcsh editor.
Page 53 (printed 3/9/94)